在x86汇编中测试负数的最紧凑方法?

Tyl*_*den 5 x86 assembly

目前,我正在这样做以测试x86程序集(r / m32,imm8)中是否为负数:

83F800 CMP EAX, 0
Run Code Online (Sandbox Code Playgroud)

可以跟着JL。这是3个字节,假定时钟为“ 1/2”。我可以使用TEST EAX或CMP EAX,imm32(编码3D),两者的时钟均为“ 1”,但占用5个字节。总的来说,如果我试图最小化代码大小,那么我的做法正确吗?再次,这是为了测试一个数字是否小于零。

har*_*old 5

add eax, eax只有两个字节(01 C003 C0),但具有破坏性。(事后检查是否携带)

test eax, eax也只有两个字节( 85 C0)。(事后检查标志)

  • “test eax, eax”是我的首选答案,因为它是非破坏性的,而且很明显它根据寄存器符号位设置了 CC 符号位。 (5认同)