内存地址引用的通用格式如下:
-
地址或偏移 (%基址寄存器,%索引寄存器,比例因子)
-
结果地址 = 地址或偏移 + %基址或偏移寄存器 + 比例因子 * %索引寄存器
-
地址或偏移
、比例因子
必须是常量,其余两个必须是寄存器。 -
省略任何一项,都会用0代替。
-
直接寻址方式
movl ADDRESS, %eax
- 会将内存地址
ADDRESS
加载到%eax
-
索引寻址方式
movl string_start(,%ecx,1), %eax
- 从
string_start
开始,将该地址与1 * %ecx
相加,并将所得值加载到%eax
中。
-
间接寻址方式
- 从寄存器指定的地址加载值。
- 例如,如果
%eax
中保存着一个地址,可通过movl (%eax), %ebx
来将该地址的值移入%ebx
-
基址寻址方式
movl 4(%eax), %ebx
- 和简接寻址比较像,但是会从
%(eax)
后4个字节处算起。
-
立即寻址方式
movl $12, %eax
- 注意数字如果不加
$
,就会变成直接寻址方式。
-
寄存器寻址方式
- 就是用寄存器。