例如:
; Method 1
.data
val1 DWORD 10000h
.code
add eax,val1
对比:
; Method 2
.code
add eax,10000h
哪种方法在编译(汇编)后执行速度更快? 我认为方法 2 会产生更快的代码,因为 CPU 在与 eax 寄存器相加之前不必从主内存读取值。我的回答不太清楚,有人可以帮忙吗?
最佳答案
无论如何,10000h 都将从存储器中读取 - 无论是从数据存储器中的位置,还是从指令存储器中的位置。对于较小的常数值,CPU 提供特殊指令,不需要额外的空间来添加值,但这取决于特定的体系结构。由于缓存,立即加法可能会更快:当指令被解码时,常量将在缓存中,并且加法将非常快。
小题外话:您的示例展示了优化 C 编译器生成比手写汇编更快的代码的情况:优化器可能不会添加 10000h,而是将上半字增加 1,并保留下半字按原样。
关于variables - 汇编语言中哪个方法执行速度更快 : adding by variables or adding by immediate value? 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8767000/