很久没有看过汇编程序了,试了试汇编实现冒泡
以下是代码,但还有些小问题没有整理通,先放上,有时间再改
; Template for DOS .exe file
assume cs: code, ds: data, ss: stack
; **********************************************
data segment
array db 8 , 4 , 5 , 2 , 22 , 3 , 7 , 8 , 9 , 1
data ends
; **********************************************
stack segment
db 1024 dup (?)
stack ends
code segment
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 名称: Main
; 功能: 冒泡排序
; 入口: 无
; 出口: al(返回dos)
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; for (i = 9; i > 0 && bChange; --i)
; {
; bChange = 0;
; for (j = 0; j < i - 1; ++j)
; {
; if ( array[j] > array[j + 1] )
; {
; //交换
; bChange = 1;
; }
; }
; }
Main Proc
start: call Init
call Sort
call Result
call Pause
mov al, 0h
call Exit
ret
Main EndP
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 名称: Init
; 功能: 初始化
; 入口: 无
; 出口: 无
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Init Proc
mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
ret
Init EndP
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 名称: Exit
; 功能: 返回dos
; 入口: al(返回值)
; 出口: al
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Exit Proc
mov ah, 4ch
int 21h
ret
Exit EndP
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 名称: Show
; 功能: 显示一个字符
; 入口: dl
; 出口: 无
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Show Proc
push ax
mov ah, 02h
int 21h
pop ax
ret
Show EndP
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 名称: Pause
; 功能: 暂停一下
; 入口: 无
; 出口: 无
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Pause Proc
push ax
mov ah, 1h
int 21h
pop ax
ret
Pause EndP
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 名称: Result
; 功能: 输出结果
; 入口: 无
; 出口: 无
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Result Proc
push si
push di
push cx
push dx
mov si, 0
mov cx, 10
lSho: mov dl, array[si]
or dl, 30h
call Show
mov dl, ' '
call Show
inc si
loop lSho
pop dx
pop cx
pop di
pop si
ret
Result EndP
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 名称: Sort
; 功能: 冒泡排序算法
; 入口: 无
; 出口: 无
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Sort Proc
mov si, 9 ; i=9
oLoop: cmp si, 0
jge OExt
mov di, 0 ; j=0
mov dx, si
dec dx
iLoop: cmp di, dx
jle Inext
mov dl, [array + di]
xchg dl, [array + di]
mov [array + di + 1 ], dl
Inext:
inc di
loop iLoop
Onext:
dec si
loop oLoop
OExt: ; 退出外循环
ret
Sort EndP
code ends
end start