2

This is my printing function, it should output a 3digit result. I store my result in RES which is a dw. The push and pop fixed my problems with printing before now I don't know where it goes wrong.

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
4

3 回答 3

2

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

于 2013-07-15T21:28:40.887 回答
0

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

于 2013-07-15T21:29:46.673 回答
0

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

并且永远不要发表诸如“将 AX 保存在堆栈上”或“恢复 AX”之类的评论。任何精通汇编程序的人(我已经有 20 年没有在其中写过任何东西了,但包括我在内)都会知道这些指令在做什么。

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

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

于 2013-07-15T22:35:08.313 回答