下面给出了最简单的十进制数输出算法,由于某种原因,它根本无法正常工作。几次我在工作表上运行了这个例子——一切都是正确的。工作的实际结果是序列“97531”的无限循环输出。
data segment
data ends
stak segment stack
db 256 dup (0)
stak ends
code segment
main proc
assume ds:data,ss:stak,cs:code
push data
pop ds
mov al,69
mov bl,10
L:
xor ah,ah
div bl
mov dl,ah
add dl,30h
mov ah,2h
int 21h
cmp al,0
jg L
mov ax,4c00h
int 21h
main endp
code ends
end main
如果我没记错的话,在调用
02h中断函数后,21h寄存器AL包含打印的最后一个字符。也就是说,这个函数重写了寄存器AL。例如,您可以在调用中断
AX(使用命令push)之前将寄存器压入堆栈,然后将其从堆栈中弹出(使用命令pop)。