【发布时间】:2020-10-20 14:39:53
【问题描述】:
请有人帮助我,过去几周我一直在研究这个问题,但我还没有找到解决问题的方法。
我正在尝试确定用户输入的数字是否是三的倍数。 数字范围在 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
【问题讨论】:
-
基本上是 NASM Assembly convert input to integer? 的副本,但那是 32 位代码。某处可能有一个 16 位版本,其中包括通过 DOS 或 BIOS 调用的输入。 (有趣的事实:为了被 9 整除,您可以使用将基数为 10 的数字求和(排除 9)的数学技巧,而不是相乘和相加来创建数字的二进制整数表示。无论哪种方式,都不是实际涉及的十六进制;您不想将数字分成 4 位块。)