如何比较x86程序集中的有符号值和无符号值

Roy*_* Li 3 binary x86 assembly x86-64

我找不到比较x86汇编代码中的正数和负数的方法.

例如:当我比较-1和1时,我总是得到-1更大.我知道这是因为2的补码格式使-1在底层二进制中大于1.

但是,任何人都可以提供一个x86组件片段来比较正数和负数,并在数学上正确吗?(例如1> -1)

谢谢!

pax*_*blo 10

您可能正在使用其中一个无符号变体,例如:

cmp  eax, ebx
jb   lesser
Run Code Online (Sandbox Code Playgroud)

有等价物可以相互检查签名号码,例如:

cmp  eax, ebx
jl   lesser
Run Code Online (Sandbox Code Playgroud)

这个链接可以很好地了解跳转变化,包括他们的签名和他们检查的标志,部分复制到这里以进行自我控制:

Instruction  Jump if ...           Signed?   Flags
-----------  -----------           --------  -----
JO           overflow                        OF=1
JNO          not overflow                    OF=0
JS           sign                            SF=1
JNS          not sign                        SF=0
JE/JZ        equal
             zero                            ZF=1
JNE/JNZ      not-equal
             not-zero                        ZF=0
JB/JNAE/JC   below
             not-above-or-equal
             carry                 unsigned  CF=1
JNB/JAE/JNC  not-below
             above-or-equal
             no-carry              unsigned  CF=0
JBE/JNA      below-or-equal
             not-above             unsigned  CF=1 or ZF=1
JA/JNBE      above
             not-below-or-equal    unsigned  CF=0 and ZF=0
JL/JNGE      less
             not-greater-or-equal  signed    SF<>OF
JGE/JNL      greater-or-equal
             not-less              signed    SF=OF
JLE/JNG      less-or-equal
             not-greater           signed    ZF=1 or SF<>OF
JG/JNLE      greater
             not-less-or-equal     signed    ZF=0 and SF=OF
JP/JPE       parity
             parity-even                     PF=1
JNP/JPO      not-parity
             parity-odd                      PF=0
JCXZ/JECXZ   CX register is zero
             ECX register is zero
Run Code Online (Sandbox Code Playgroud)