我对如何在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
答案 0 :(得分:8)
x86指令集在使用之前不需要将存储器地址加载到寄存器中 - 几乎所有指令都可以在指令中使用直接或间接存储器引用。有关详细信息,请参阅Intel architecture manual。
首先将地址加载到寄存器中的要求是某些RISC cpus的特性,如MIPS。