我有这个 x86 汇编代码:
mov [ebp+var_8], 0
mov eax, Str_len
cmp [ebp+var_8], eax
jnb short loc_4018C4
如果 Str_len 始终不为 0,那么这个 JNB 执行什么操作?我的推理是,如果 Str_len 变量永远不会低于 0,则永远不会执行跳跃,对吗?
顺便说一句,在 x86 的二进制表示中,寄存器的值怎么可能小于零?
最佳答案
jnb
指令在进位标志为零时跳转。 cmp
指令根据dst
操作数减去src
操作数的结果更新标志。 dst
操作数是 Intel 表示法中的第一个操作数,因此,标志将根据 [ebp+var_8]-eax
的结果进行更新。由于 [ebp+var_8]
等于零,当 eax
为零时进位标志将被清除,否则设置。总而言之,当 eax
为零时,分支就会发生。
关于assembly - 与 0 (x86) 比较后的 JNB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15052894/