将以下代码改的容易理解一些:outi proc mov ax,count ;待输出的数先存在bx里面,在给ax mov bx,10000 ;初始数位权值为10000 mov ff,0 ;每次都赋初值0 cov1: xor dx,dx ;将dx:ax中的数值除以权值 div bx mov cx,dx ;余数备份到CX寄存器中 cmp ff,0 ;检测是否曾遇到非0商值 jne nor1 ;如遇到过,则不管商是否为0都输出显示 cmp ax,0 ;如未遇到过,则检测商是否为0 je cont ;为0则不输出显示 nor1: mov dl,al ;将商转换为ascii码输出显示 add dl,30h mov ah,2 int 21h mov ff,1 ;曾遇到非0商,则将标志置1 cont: cmp bx,10 ;检测权值是否已经修改到十位了 je outer ;如果相等,则完成最后的个位数输出显示 xor dx,dx ;将数位权值除以10 mov ax,bx mov bx,10 div bx mov bx,ax mov ax,cx ;将备份的余数送入AX jmp cov1 ;继续循环 outer: mov dl,cl ;最后的个位数变为ascii码输出显示 add dl,30h mov ah,2 int 21h mov ah,2 mov dl,10 int 21h ret outi endp
时间: 2024-01-12 17:02:28 浏览: 30
下面是修改后的代码,通过添加注释和重新命名变量来使其更易于理解:
```
outi proc
mov bx, count ; 将待输出的数存储到 BX 中
mov ax, bx ; 将数值复制到 AX 中
mov cx, 10000 ; 初始数位权值为 10000
mov ff, 0 ; 每次都赋初值 0
loop1:
xor dx, dx ; 将 DX:AX 中的值除以权值
div cx
mov si, dx ; 将余数备份到 SI 中
cmp ff, 0 ; 检测是否曾遇到非 0 商值
jne output ; 如遇到过,则不管商是否为 0 都输出显示
cmp ax, 0 ; 如未遇到过,则检测商是否为 0
je skip_output ; 为 0 则不输出显示
output:
mov dl, al ; 将商转换为 ASCII 码输出显示
add dl, 30h
mov ah, 2
int 21h
mov ff, 1 ; 曾遇到非 0 商,则将标志置 1
skip_output:
cmp cx, 10 ; 检测权值是否已经修改到十位了
je done ; 如果相等,则完成最后的个位数输出显示
xor dx, dx ; 将数位权值除以 10
mov bx, 10
div bx
mov cx, ax
mov ax, si ; 将备份的余数送入 AX
jmp loop1
done:
mov dl, cl ; 最后的个位数变为 ASCII 码输出显示
add dl, 30h
mov ah, 2
int 21h
mov ah, 2
mov dl, 10
int 21h
ret
outi endp
```
这个修改后的代码使用了更明确的变量名,添加了注释来解释每一行代码的作用。同时,将一些操作分解成了更小的步骤,使代码更加易于理解。