使用16位汇编程序NASM的3的倍数



请有人帮我,过去几周我一直在研究这个问题,但我还没有找到解决问题的方法。

我正在尝试确定用户输入的数字是否是三的倍数。数字的范围在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

我正在尝试确定用户输入的数字是否为三的倍数。数字的范围在1-9之间。

<blockquote\
mov ah,01   
int 21h

>您从这个DOS函数中得到的输入是一个用ASCII码表示的字符。如果您使用了19获得这些键上描绘的,您只需要减去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

休息就像你做的一样…

相关内容

  • 没有找到相关文章

最新更新