修改原因
主要是因为原始博客的思想是每次找出当前最大值然后将其名次写到对应地址中,之后将其置零,问题就出在置零上面,我们亲爱的hua老师给我们的数据里面竟然有0,瞬间不爽。
现在我的程序思想是每次找出最小值,然后将其置零,我发现这样编出来的程序要比之间的逻辑还清晰,因为cx就是当前最小值的名次,哈哈哈哈。
代码
data segment
org 3000h
num db 66h,34h,55h,77h,88h,99h,33h,0h
data ends
code segment
assume cs:code ds:data
start:
mov ax,data
mov ds,ax
mov si,3000H
mov cx,0008h
mov di,3100h
a1:
call lowest;计算当前最小值
mov al,cl;名次同外循环cx
mov bx,dx;当前I值
mov [bx+di],al
loop a1
mov ax,4c00h
int 21h
lowest proc;寻找当前最小值的子函数
push cx
push ax
mov cx,0008h
mov al,0ffh
mov bx,3000h
mov si,bx
a2:
cmp al,[si]
jbe a3;小于等于则转移
mov al,[si];al<[si]则交换,找出最小值
mov dx,si
sub dx,bx;记录当前最小值的I值
a3:
inc si
loop a2
add bx,dx;当前最小值的地址
mov al,0ffh
mov [bx],al;将当前最大值置为0
pop ax
pop cx;cx出栈
ret
lowest endp
code ends
end start