以下两者之间是否有任何区别:
mov eax, [eax+4]
和
add eax, 4
mov eax, [eax]
如果没有,汇编程序会选择哪一个进行某种优化吗?
答案 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]
不会影响标记。这两个版本具有不同的指令和字节计数,并且它们可能使用不同的执行单元。这些可能在优化时很重要。
通常情况下,汇编程序不会更改您的代码,无论您编写什么都是您将获得的代码。