我正在尝试通过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
答案 0 :(得分:1)
让我们先从清除错误开始:
mul bl
,请先将号码91放在AL
注册表中(不是CL
)。div bl
寄存器中使用BL
指令(没有“mod”)和数字23。像这样:
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