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

标签 assembly x86 micro-optimization

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

83F800 CMP EAX, 0

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

最佳答案

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

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

关于assembly - 在 x86 汇编中测试负数的最紧凑方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15453755/

相关文章:

c++ - ecx 寄存器是否用于传递静态函数调用中的参数之一?

linux - 为什么 gcc 为 x64 共享库强制 PIC?

haskell - 如何使用 GHC 在近机器级别可靠地影响生成的代码?

python - 为什么python是低级的?

c - 如何引用动态链接库中的全局变量?

c - 在 x86_64 汇编问题中添加 double

c# - 避免 C# 虚拟调用的开销

assembly - 代表回复 : why all the hassle?

在 Linux 上将 C 程序翻译成汇编 (x86_64)

assembly - QEMU 是否使用与 x86 到 x86 仿真的 guest 寄存器相同的主机寄存器?