以下两者有什么区别吗?
mov eax, [eax+4]
和
add eax, 4
mov eax, [eax]
如果不是,那么汇编程序是否选择哪一个来进行某种优化?
这两段代码之间有一些区别。首先,指令的编码和大小。第一个编码如下…
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
(调节/辅助)、CF
(进位)和PF
(奇偶校验)标志位。mov
指令既不设置也不打乱这些标志。
最后回答你的问题…不。没有现有的汇编程序可以帮助进行任何优化。汇编中的代码严格按照文字进行编译。我的建议是使用3字节的代码,因为它更短,执行速度更快。
祝你好运!
是的,有区别。你是否关心他们是另一回事。add
会影响标志,而[eax+4]
不会。这两个版本有不同的指令和字节计数,它们可能使用不同的执行单元。这些在优化时可能很重要。
通常情况下,汇编程序不会修改你的代码,无论你写什么,你都会得到什么。