我有这个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
(实际上是jnc
的别名)使用“无符号谓词”之一,因此对于jnb
而言,值永远不会低于零。
但是零是比较的第一个参数,因此它实际上是在计算0 - eax
(然后仅保留标志,而不保留结果),然后在没有进位的情况下跳转。因此可以归结为:如果Str_len
为零,则跳转。
关于assembly - 与0(x86)比较后的JNB,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15052894/