datas segment
message db 'sorted: ',0ah,0dh,'$' ; 提示信息
space db ' ','$' ; 空格
data dw 0,1,2,3,4,6,5,7,8,9,10,11,12,13,14 ; 數組元素
count dw 15 ; 數組的長度
datas ends
stacks segment
dw 256 dup(?)
stacks ends
codes segment
start:
mov ax,datas
mov ds,ax
mov si, 0 ;偏移地址初始化
mov cx, count ;循環次數
;----------排序-----------
mov cx, count ; 循環次數
mov di, 0
loop1:
call sort
add di, 2 ; 數組偏移位加一
loop loop1
mov dx, offset message ; 打印提示文字
mov ah, 9
int 21h
mov cx, count ; 循環次數
mov di, 0 ; 數組偏移位
loop2:
call print ; 打印數字
call PrintSpace ; 打印空格
add di , 2
loop loop2
exit: ; 退出
mov ah, 4ch
int 21h
; 在每個數字後輸出空格
PrintSpace proc near
push ax ; 保存數據
push dx
mov dx, offset space ;' '
mov ah, 9
int 21h
pop dx ; 數據還原
pop ax
ret
PrintSpace endp
; 將數組中的元素一一輸出
print proc near
push ax ; 保存數據
push bx
push cx
push dx
mov cx, 0
mov bx, 10
mov ax, data[di]
last:
mov dx, 0
div bx ; DIV商放AX,餘數放入DX
push dx
inc cx ; 循環次數,表示數字的位數
cmp ax, 0 ;
jnz last
age:
pop dx
or dx, 30h ; 將dx中的數值轉換成ASCII編碼以輸出在屏幕上
mov ah, 2
int 21h
loop age
pop dx ; 數據還原
pop cx
pop bx
pop ax
ret
print endp
;---------數字排序---------------------
sort proc near
push bx
push dx
mov si,di ; 將SI賦值爲DI
loop1:
add si,2 ; 偏移加2,因爲數字定義爲DW
mov bx,data[di] ; 第一個數
cmp bx,data[si]
ja swap ; 取的第一個數大於第二個數?
jmp next ; 否則不修改,判斷是否爲最後一個數字
swap:
mov dx,data[si] ; 將這兩個數進行調換
mov data[di],dx
mov data[si],bx
next:
mov ax, count
add ax,ax
cmp si,ax ; 如果SI偏移位大於最大的偏移位,則退出循環
jl loop1
pop dx
pop bx
ret
sort endp
codes ends
end start
彙編冒泡排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.