代码 在emu8086调试过
assume cs:code,ds:data
data segment
array dw 49,38,65,97,76,13,27 ;要排序的数
count dw ($-array)/2 ;获取排序数目
data ends
code segment
start:mov ax,data
mov es,ax
mov ds,ax
retry:cmp count,1 ;是否循环排序过count-1次
je exit
dec count
mov cx,count
mov si,offset array
cld
next1:lodsw
cmp ax,[si]
jle next2
xchg ax,[si]
xchg ax,[si-2]
next2:loop next1
jmp short retry
exit:mov ax,4c00h :程序结束
int 21h
code ends
end start
每次排序依次找到最大的数,第二大的数。。。以此类推。程序解释:
lodsw 将ds:[si]的字单元内容给ax,并且将si加2或减2,此程序中由于设置了cld,所以每次si都自动加2;
jle 和cmp配合使用,判断low and equal,就是小于或等于,即操作数1小于或等于操作数2就执行跳转,否则顺序执行;
xchg 互换指令,即将ax和[si]中的内容互换,该指令不影响标志位。
最后运行结果可以通过查看内存的方式验证,这里就不输出到前端了。