从键盘读取以$结尾的N位十进制数。(N〈10)。在emu 8086程序(ASM)中打印该数的位数及其数学奇偶性。
我似乎不明白我做错了什么。“input”是一个无效指令吗?我怎么能在汇编中从键盘上读取数字呢?
numCifre db 0
start:
input number
mov cx, 0
.numaraCifre:
mov ax, number
xor dx, dx
div byte 10
inc cx
cmp ax, 0
jne .numaraCifre
mov dl, cl
add dl, '0'
mov ah, 0Ah
int 21h
mov ax, number
and ax, 1
jz .par
mov dl, 'I'
jmp .showParity
.par:
mov dl, 'P'
.showParity:
mov ah, 0Ah
int 21h
mov ax, 4C00h
int 21h
1条答案
按热度按时间pes8fvy91#
“input”(
input number
)是否为无效指令?它当然不是一个 * 指令 *。它可能是一个宏,如果这样定义的话...
在汇编语言中如何从键盘上读取数字?
Inputting multi-radix multi-digit signed numbers with DOS解释了这一点,甚至有一个豪华版提供。
但是对于你的特殊任务
从键盘读取以$结尾的N位十进制数(N〈10)。
输入单个数字(最多9个)将是一件简单的事情:
在emu 8086程序(ASM)中打印数字的位数及其数学奇偶校验。
由于位数在0到9之间,因此打印值几乎与您所做的一样,只是您使用了错误的函数编号0Ah。
对于数学奇偶性(又称偶/奇),你只需要考虑数字的最低有效位,这就是为什么在上面的输入例程中我把最后一位存储在BL寄存器中。
在你的 *.numaraCifre中 *
div byte 10
是错误的。立即数操作数是不可能的,即使 10 引用内存变量(对于emu 8086,这并不奇怪),它仍然必须是一个字而不是一个字节。