我有作业来编写汇编代码以检查数字是否为奇数或偶数。我有这个代码
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的结果?
如果设置了最低位,则无符号和有符号数字(二进制补码)都是奇数:
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
| 归档时间: |
|
| 查看次数: |
11191 次 |
| 最近记录: |