assembly - 检查数字是奇数还是偶数(数学奇偶校验)

标签 assembly x86-16 parity

对于一位数,我想知道它是奇数还是偶数(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/

相关文章:

assembly - 如何在 8086 中声明局部变量?

assembly - 数据如何以字节形式加载到所需的内存字段?

assembly - FAT16 Bootloader 仅加载文件的第一个簇

c - 你如何使用 C 确定数字的二进制表示中是否有偶数 1?

STM32F427 的 USART1 有时会设置第 8 个数据位,就好像它是奇偶校验位一样

vb.net - 将十六进制字符串转换为整数

assembly - Cortex M3 上的非 Thumb ARM 代码

linux - 为什么 gcc 4.x 在调用方法时默认为 linux 上的堆栈保留 8 个字节?

c - 反汇编c代码中的冗余操作

assembly - 'label' 关键字在 MASM 中如何工作?