我有这个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/

10-10 20:14