NASM中x86架构下地址运算的硬件处理机制问询
x86寻址计算的硬件与编译时处理问题
寄存器相对寻址的运行时计算
- 执行
mov rax, [rbx+1]时,rbx+1的有效地址计算完全由CPU硬件在运行时完成,而且是通过CPU内部的**专用地址生成单元(AGU)**来处理,不会占用通用寄存器。AGU是x86架构里专门负责内存寻址运算的硬件模块,和负责通用计算的算术逻辑单元(ALU)相互独立,部分场景下还能和其他指令并行执行,提升运行效率。
符号常量的编译时地址计算
- 对于先定义
string: db "I'm lost", 0再执行mov rax, [string+1]的情况:string是汇编阶段定义的符号,它的内存地址在编译(汇编)时就已确定,因此string+1这个地址会被汇编器直接计算为一个固定的立即数地址,最终生成的机器码里是直接指向该固定地址的寻址操作,完全不需要运行时再做计算。而rbx的值是程序运行过程中动态确定的(比如可能是某个函数返回值、用户输入对应的内存地址),所以rbx+1只能在运行时由AGU完成计算。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

