汇编程序调试尝试打印商和余数

时间:2017-02-01 02:56:52

标签: assembly

我正在尝试通过DOSBOX创建一个程序(程序名称是mod.com),我在打印我的商和91 x 13 mod 23的剩余部分时遇到了麻烦。

mov cl, 91
mov bl, 13
mul bl
mov al, 23
mod al
mov dl,al
mov ah,2
int 21

1 个答案:

答案 0 :(得分:1)

让我们先从清除错误开始:

  • 要使用mul bl,请先将号码91放在AL注册表中(不是CL)。
  • 要获得商和余数,请在div bl寄存器中使用BL指令(没有“mod”)和数字23。
  • 要使用DOS输出,请使用十六进制21h而不是十进制21。

像这样:

mov  al, 91
mov  bl, 13
mul  bl       ;product in AX
mov  bl, 23
div  bl       ;quotient in AL, remainder in AH
mov  dl, al
mov  ah, 02h
int  21h

此代码是正确的,但它不会显示任何有用的内容,因为DL寄存器中的字节尚未表示字符。你需要转换它。

商在AL并且值为51.这将导致输出2个字符 这是我的版本显示它:

aam           ;divides AL by 10, leaves 5 in AH and 1 in AL
add  ax, "00" ;converts to characters: "5" in AH and "1" in AL
mov  dx, ax   ;"5" in DH and "1" in DL
xchg dl, dh   ;"1" in DH and "5" in DL  We need to output "5" first!
mov  ah, 02h
int  21h
mov  dl, dh   ;Secondly we output "1"
mov  ah, 02h
int  21h

要另外输出剩余部分,请使用类似的代码,但请记住,如果没有预防措施,它的值(在AH中)到现在将会丢失!
所以暂时将它保存在堆栈中:

push ax
...           ;The code above
pop  ax
mov  al, ah   ;Now the remainder is back again
...           ;The code above