汇编:添加指令和运算符添加之间的区别

时间:2014-08-12 21:47:48

标签: assembly

以下两者之间是否有任何区别:

mov     eax, [eax+4]

add     eax, 4
mov     eax, [eax]

如果没有,汇编程序会选择哪一个进行某种优化吗?

2 个答案:

答案 0 :(得分:4)

这两段代码之间存在一些差异。一,指令编码和大小。第一个编码如下......

8b 40 04                mov    eax, [eax+4]

...相当于两个3个字节。

对于第二个......

83 c0 04                add    eax, 4
8b 00                   mov    eax, [eax]

...总计5个字节。

此外,add指令设置OF(溢出),SF(符号),ZF(零),AF(调整/辅助),{{根据结果​​,1}}(进位)和CF(奇偶校验)标志。 PF指令既不设置也不会扰乱任何这些标志。

最后回答你的上一个问题...不。没有现有的汇编程序可以帮助进行任何优化。汇编代码是严格按字面编译的。我的建议是使用3字节的代码片段,因为它更短,执行速度更快。

祝你好运!

答案 1 :(得分:2)

是的,有差异。你是否关心它们是另一回事。 add会影响标记,[eax+4]不会影响标记。这两个版本具有不同的指令和字节计数,并且它们可能使用不同的执行单元。这些可能在优化时很重要。

通常情况下,汇编程序不会更改您的代码,无论您编写什么都是您将获得的代码。