今天又重新理清了一下思路,要考试了,还是熟悉熟悉基本的东西吧。。。
data segment
arr db 12,23,2,4,3,9,8,34,21,44,55,66,77,11,90
count db $-arr
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov ax,0
mov cx,0
mov cl,count
dec cx;比较n-1次
mov bx,0
loop1:
push cx;cx入栈,避免内循环改变cx的值
mov si,bx;si为内层循环的初始值,相当于下标
mov al,arr[si];al为关键字
loop2:
cmp al,arr[si+1];比较
jg next;al>arr[si+1]则将arr[si+1]设为当前最小值,交换
jmp done;否则不交换
next:
xchg al,arr[si+1];暂时存在al中,并没有改变内存中的值
done:
inc si;比较下一个
loop loop2
mov arr[bx],al;得到一个最小值, 前面的已经排好序
inc bx;下一个
pop cx
loop loop1
mov ax,4c00h
int 21h
code ends
end start