Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
79 views

Computer Architecture and Assembly Language Programming - CS401 Spring 2009 Assignment 02 Solution

This document contains an assembly language program that uses bubble sort to sort numbers in a data section in signed descending order. It includes the program code, which loads the unsorted data, compares elements using JGE, and swaps elements if out of order. Screenshots show the unsorted data initially and sorted data after execution. The document also explains how negative numbers are stored in two's complement form.

Uploaded by

V Xange
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
79 views

Computer Architecture and Assembly Language Programming - CS401 Spring 2009 Assignment 02 Solution

This document contains an assembly language program that uses bubble sort to sort numbers in a data section in signed descending order. It includes the program code, which loads the unsorted data, compares elements using JGE, and swaps elements if out of order. Screenshots show the unsorted data initially and sorted data after execution. The document also explains how negative numbers are stored in two's complement form.

Uploaded by

V Xange
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

www.VUSR.

net
CS401- Computer Architecture and Assembly Language
Programming
Assignment # 2
Spring 2009
Total Marks: 20
Solution:
Program code:

; program to sort the numbers, using bubble sort, in signed descending order

[org 0x0100]
jmp start

data: dw -10, -30, -25, 50, 15, 20, 35, 40, 45, 0
swap: db 0

start: mov bx, 0 ; initialize array index to zero


mov byte [swap], 0 ; rest swap flag to no swaps
SR
loop1: mov ax, [data+bx] ; load number in ax
cmp ax, [data+bx+2] ; compare with next number
jge noswap ; no swap if already in order
mov dx, [data+bx+2] ; load second element in dx
U

mov [data+bx+2], ax ; store first number in second


mov [data+bx], dx ; store second number in first
; flag that a swap has been done
V

mov byte [swap], 1

noswap: add bx, 2 ; advance bx to next index


cmp bx, 18 ; are we at last index
jne loop1 ; if not compare next two

cmp byte [swap], 1 ; check if a swap has been done


je start ; if yes make another pass

mov ax, 0x4c00 ; terminate program


int 0x21

Page 1 of 3

http://lms.vusr.net
www.VUSR.net
Screen-shots:

As the program starts execution, the unsorted data is loaded in memory (M1
window) as shown in the red boundary below:

SR
As negative numbers are stored in two’s compliment form:
To take two’s compliment of a number, following are the steps:
U

Step1: Take 1 compliment of the number (without sign)


Step2: Add 1 to the one’s compliment (calculated in step 1)
So:
V

First element is -10 (decimal):


As we have defined it of size word (with the help of dw), the value 10 can be
represented in binary as:
0000000000001010 (binary)
Taking one’s compliment (simply change 0 to 1, and 1 to 0):
1111111111110101
Adding 1 to the one’s compliment:
1111111111110110 (binary)
FFF6 (hexadecimal)
[Note that this number is also equal to 65526(in decimal) when treated as unsigned
number]

In little-Endian notation, it will be represented as:


F6FF (as shown in the screen-shot above)

Page 2 of 3

http://lms.vusr.net
www.VUSR.net

After Executing the program, the data is now sorted in signed descending order:

SR
So, now the data is in signed descending order:

50(0032), 45(002D), 40(0028), 35(0023), 20(0014), 15(000F), 0(0000), -10(FFF6), -25(FFE7),


-30(FFE2)
U
V

Page 3 of 3

http://lms.vusr.net

You might also like