请有人帮我,过去几周我一直在研究这个问题,但我还没有找到解决问题的方法。
我正在尝试确定用户输入的数字是否是三的倍数。数字的范围在1-9之间。
以下是我正在处理的代码:
mov ah,01
int 21h
mov bl,al
mov bl,3
div bl
cmp ah,0 ;Checks to see if remainder is zero
je e ;if it is not, go to e else execute code below
mov dx, var1
mov ah,09
int 21h
jmp exit
e:
mov dx, var2
mov ah,09
int 21h
jmp exit
exit:
mov ah,4ch
int 21h
我知道我需要将我的输入转换为十六进制,我尝试过使用下面的行,但这没有帮助,当我输出值以便能够看到它们时,我会得到像微笑一样的符号:
add ch,48
<blockquote\我正在尝试确定用户输入的数字是否为三的倍数。数字的范围在1-9之间。
mov ah,01
int 21h
>您从这个DOS函数中得到的输入是一个用ASCII码表示的字符。如果您使用了1到9获得这些键上描绘的值,您只需要减去48:
sub al, 48
要检查数字是否是3的倍数,您确实可以除以3并检查余数。但是字节大小的除法需要AX
寄存器中要除法的数字,而这是您忽略的!
mov ah, 0 ; From AL to AX (could have used CBW instruction here)
mov bl, 3
div bl ; Divides AX by BL -> Quotient in AL, Remainder in AH
休息就像你做的一样…