组装检查数字是否为偶数

vm3*_*381 3 x86 assembly

我有作业来编写汇编代码以检查数字是否为奇数或偶数。我有这个代码

code_seg SEGMENT
    ASSUME cs:code_seg, ds:data_seg;

    mov ax, 11;
    test ax, 1;

end: jmp end;
code_seg ENDS
Run Code Online (Sandbox Code Playgroud)

并检查数字是否是偶数,我看是否设置了零标志。我知道测试指令就像逻辑与,如果结果为0,它将设置零标志。我的问题是:如何检查数字是否为奇/偶?其实我不知道为什么有些偶数(二进制)和(逻辑与)1给出0的结果?

zx4*_*485 5

如果设置了最低位,则无符号和有符号数字(二进制补码)都是奇数:

00000001 = 1    (odd)    // unsigned, or signed positive
11111111 = 255  (odd)    // unsigned
01111111 = 127  (odd)    // unsigned, or signed positive
10000001 = -127 (odd)    // signed negative
11111111 = -1   (odd)    // signed negative
Run Code Online (Sandbox Code Playgroud)

所以test指令

test al, 1
Run Code Online (Sandbox Code Playgroud)

检查是否设置了AL / AX / EAX / RAX的最低位。如果是,则数字为奇数。
可以使用Jcc说明进行检查,尤其是那些?ZERO使用

JNZ target    ; jump if odd  = lowest bit set
JZ  target    ; jump if even = lowest bit clear = zero
Run Code Online (Sandbox Code Playgroud)


小智 -2

遗憾的是我对汇编不太有经验,但在伪代码中有一个称为“mod”的功能,它给出了除法的余数。

看看这里:汇编语言 - 如何做模?

例如:

x = 3 z = x mod 2

z 将为 1,如果 x 相等,z 将为 0