我对 Assembly 中如何实现变量有点困惑。我知道以下声明在程序的 data
部分中创建一个命名内存位置:
.section .data
var:
.long 23
然后您可以访问变量,例如:
movl var, %eax //read from var location
我不清楚的是上述指令是如何实际实现的。我的印象是,内存引用,甚至是绝对内存引用,都需要先加载到寄存器中,然后才能使用。
汇编器是否需要将上述指令转换为多条指令,如:
leal var, %ebx
movl (%ebx), %eax
或者汇编器是否跟踪 var
的地址并像绝对立即访问一样访问该位置,例如:
movl ($addr_of_var), %eax
最佳答案
x86 指令集不需要在使用内存地址之前将其加载到寄存器中 - 几乎所有指令都可以在指令中使用直接或间接内存引用。请参阅Intel architecture manual了解更多详情。
首先将地址加载到寄存器中的要求是某些 RISC cpu(例如 MIPS)的特征。
关于assembly - 汇编变量是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39969625/