增量和添加组件之间的差异

时间:2015-03-03 20:51:58

标签: assembly

汇编中的以下两组指令之间是否有任何区别?我什么时候应该使用第一种情况?何时应该使用第二种情况?

案例1:INC SI         INC SI

案例2:ADD SI,02

3 个答案:

答案 0 :(得分:1)

inc保持进位标志不变,偶尔有用(例如长时间添加)。但它有时也会产生有趣的效果。在某些处理器(Core2和Nehalem)上,在标记被“部分更新”之后读取任何部分标记。导致最多7个循环的失速。在inc之后使用进位和其他一些标志(但这通常没有意义)对几乎所有的处理器都有惩罚,即使是那些巧妙地"分裂"几个部分的旗帜。在P4上,inc具有惩罚(而不是读取其标志的指令),其形式为对先前标志的错误依赖,因此除非仅使用{{{} inc,否则它几乎是不可避免的。 1}}。

由于这些是16位指令,它们可能会导致更多问题(部分寄存器写入,长度改变前缀取决于模式)

答案 1 :(得分:0)

第一个(inc)不需要显式增加量(总是1),因此可以更有效地编码。

在一些(非常老的)处理器上,这可能意味着它可以更有效地安排。但由于两者都是相对简单的操作,因此在没有特制代码的现代x86 CPU上,差异不会显着。

答案 2 :(得分:0)

第二个可能需要额外的存储空间,并且可能需要额外的时间来从存储中取出它。某些机器指令有空间用于指令中包含的小常量值。如果是这样,则第一对指令可能比第二种情况的单指令花费更多时间。

所以它取决于汇编语言的机器。