如何实现汇编变量?

时间:2016-10-11 02:27:40

标签: assembly x86 gas

我对如何在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

1 个答案:

答案 0 :(得分:8)

x86指令集在使用之前不需要将存储器地址加载到寄存器中 - 几乎所有指令都可以在指令中使用直接或间接存储器引用。有关详细信息,请参阅Intel architecture manual

首先将地址加载到寄存器中的要求是某些RISC cpus的特性,如MIPS。