对于一位数,我想知道它是奇数还是偶数(2 的倍数)。例如,给定 9,打印出这是一个奇数。
(即检查 mathematical parity ,而不是计算 parity 。)
这就是我所拥有的:
assume cs:cseg,ds:dseg,ss:sseg
cseg segment
start:
mov ax, dseg
mov ds, ax
mov ah, 01h ; Here, im adding a number
int 21h
jp even
jnp odd
even:
mov ah,09
lea dx,par
int 21h
jmp exit
odd:
mov ah,09
lea dx,odd1
int 21h
jmp salir
salir:
mov ax,4C00h
int 21h
cseg ends
dseg segment byte
even Db 'Even number$'
odd11 Db 'Odd number$'
dseg ends
sseg segment stack
db 100h dup(?)
sseg ends
end start
最佳答案
要测试某个数字是奇数还是偶数,请检查该数字的第 0 位。如果设置了 bit0,则数字为奇数。没有其他的。 不要混淆 PF(奇偶校验标志)和 JP/JNP 条件。奇偶校验标志显示最低有效字节中设置的位数是偶数还是奇数。
来自文档:
PF (bit 2) Parity flag — Set if the least-significant byte of the result contains an even number of 1 bits; cleared otherwise.
数字 1 - 奇数,00000001b PF 被清除,因为只设置了一位
数字2 - 偶数,00000010b,但PF又被清除了!因为只设置了一位
数字 3 - 奇数,00000011b,但 PF 设置!因为设置了两个位
关于assembly - 检查数字是奇数还是偶数(数学奇偶校验),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29292455/