;用汇编实现 冒泡排序
data segment
ary db 6,2,5,1,3,4,9,8,7
aryCount dw $-ary
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov bx,0
mov cx,aryCount
outLoop:
inc bx
push cx
mov cx,aryCount
sub cx,bx ;每次外循环循环一次内循环少比较一次
lea si,ary ;地址指向
;---------------------------------------------------下面是内循环
innerLoop:
mov al,[si]
cmp al,[si+1]
jge next ;有符号数大于等于则不做操作
xchg al,[si+1]
xchg al,[si]
next:
inc si
loop innerLoop
;---------------------------------------------------
pop cx
loop outLoop ;判断cx的值若为0则结束循环
mov ax,4c00h
int 21h
code ends
data segment
ary db 6,2,5,1,3,4,9,8,7
aryCount dw $-ary
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov bx,0
mov cx,aryCount
outLoop:
inc bx
push cx
mov cx,aryCount
sub cx,bx ;每次外循环循环一次内循环少比较一次
lea si,ary ;地址指向
;---------------------------------------------------下面是内循环
innerLoop:
mov al,[si]
cmp al,[si+1]
jge next ;有符号数大于等于则不做操作
xchg al,[si+1]
xchg al,[si]
next:
inc si
loop innerLoop
;---------------------------------------------------
pop cx
loop outLoop ;判断cx的值若为0则结束循环
mov ax,4c00h
int 21h
code ends
end start
源代码在上面 下面分析下 怎么实现冒泡排序的
ary 获取数组元素
运用 $-变量名 来获取数组长度
然后运用两个loop循环
outLoop:
loop outLoop
外循环 循环数组长度次 每次将一个最小值冒出
内循环
innerLoop:
loop innerLoop
内循环 具体实现每次冒出及交换元素
需要注意的是这里两次都要用到计数器 cx 所以选择将cx在外循环中 push 与 pop保存