在装配中打印3位数

时间:2013-07-15 21:17:03

标签: assembly x86-16

这是我的打印功能,它应该输出一个3digit结果。我将结果存储在RES中,这是一个dw。推出和弹出修复我的打印问题,现在我不知道它出错了。

XOR AX, AX
XOR BX, BX

    ;this divides my 3digit number by 100 giving me my, hundredth digit
MOV AX, RES
MOV BX, 100
DIV BX

    ;prints the hundredth digit
ADD AL, '0'
MOV DL, AL
PUSH AX ; save AX on the stack 
MOV AH, 02h
INT 21h
POP AX ; restore ax

    ;divides the remainder by 10 giving me my tens digit
MOV BX, 10
DIV BX

    ;prints my tens digit
ADD AL, '0'
MOV DL, AL
PUSH AX ; save AX on the stack
MOV AH, 02h
INT 21h
POP AX ; restore ax

    ;print my last remainder which is my ones
ADD AH, '0'
MOV DL, AH
MOV AH, 02h
INT 21h

3 个答案:

答案 0 :(得分:1)

“div bx”将dx:ax除以bx。那么,你的dx是什么?

答案 1 :(得分:0)

我相信你正在使用“RES”的地址而不是它的值,这需要括号或括号。

答案 2 :(得分:0)

在十级阶段,你的余数在AH,而不是AX。

并且从不发出诸如“将AX保存在堆栈上”或“恢复AX”之类的评论。任何对汇编程序有流畅性的人(自从我写了任何内容已有20年,但包括我在内),都会知道这些指令在做什么。

评论应该解释你正在做的为什么,而不是你在做什么。

我已经足够生气了,我不会发誓没有更多的错误,我只是指出一个我看到的。