今天又重新理清了一下思路,要考试了,还是熟悉熟悉基本的东西吧。。。
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