Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
目前我这样做是为了测试 x86 程序集 (r/m32,imm8) 中的负数:
83F800 CMP EAX, 0
这可以跟在 JL 后面。这是 3 个字节,据说时钟为“1/2”。我可以使用 TEST EAX 或 CMP EAX,imm32(编码 3D),两者的时钟均为“1”,但占用 5 个字节。一般来说,如果我试图最小化代码大小,我这样做的方式是否正确?再一次,这是为了测试一个数字是否小于零。
add eax, eax只有两个字节(01 C0或03 C0),但具有破坏性。(之后检查是否携带)
add eax, eax
01 C0
03 C0
test eax, eax也只有两个字节(85 C0)。(之后检查签名)
test eax, eax
85 C0
您可以使用:
or eax, eax
它是一个字节短(只有两个字节的操作码)指令!