variables - 汇编语言中哪个方法执行速度更快 : adding by variables or adding by immediate value? 为什么?

标签 variables optimization memory assembly

例如:

; 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/

相关文章:

r - 如何保存输出以便稍后在 Shiny R 的另一个输出中使用它

条件语句中带行间距的 PHP 变量

linux - 奇怪的CPU使用率: 100% utilization,,但温度异常低

java - 正确处理大量对象

java正则表达式用{var}次{var}px替换{var}px

php - 为什么我的 PHP 查询显示空白结果

c - 哪个更快 - 排序或乘以一个小的元素数组?

optimization - 具有多个聚合的 SPARQL 查询超出内存限制

php - 使用文本表代替 MySQL 表

c++ - vector c++ vector 的大小