汇编:加法指令和加法操作符的区别



以下两者有什么区别吗?

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]不会。这两个版本有不同的指令和字节计数,它们可能使用不同的执行单元。这些在优化时可能很重要。

通常情况下,汇编程序不会修改你的代码,无论你写什么,你都会得到什么。

最新更新