【发布时间】:2013-03-16 19:32:19
【问题描述】:
目前我这样做是为了测试 x86 程序集 (r/m32,imm8) 中的负数:
83F800 CMP EAX, 0
这可以跟JL。这是 3 个字节,据说时钟为“1/2”。我可以使用 TEST EAX 或 CMP EAX,imm32(编码 3D),两者的时钟均为“1”,但占用 5 个字节。一般来说,如果我试图最小化代码大小,我这样做的方式是否正确?再一次,这是为了测试一个数字是否小于零。
【问题讨论】:
-
微架构的时间安排是什么?
-
如果你使用
JS(“jump if sign”),在很多情况下你可能会跳过CMP。符号标志应该已经被最后一个算术或移动指令正确设置,如果设置了符号标志,则结果是否定的。尽管可能存在一些奇怪的特殊情况,但由于某些不明原因,这将不起作用。 -
@Damon 的动作不会改变标志