【发布时间】:2016-10-11 02:27:39
【问题描述】:
我对如何在 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
【问题讨论】:
-
没有。你对要求有误解。您不必将地址加载到寄存器中。查看
MOV系列指令的指令参考。
标签: assembly x86 gnu-assembler