Linux下汇编学习-3寻址方式
一般的寻址格式为
ADDRESS_OR_OFFSET(%BASE_OR_OFFSET,%INDEX, MULTIPLIER)
这上面所有的字段都是可选的,最后的地址为:
FINALADDRESS = ADDRESS_OR_OFFSET + %BASE_OR_OFFSET + MULTIPLIER * %INDEX
1直接寻址
这种寻址方式只使用了ADDRESS_OR_OFFSET这一个字段,例如:
value:
.int1
movl value, %eax
最终内存单元的1将被送到寄存器eax中。
注意movl $1, %eax和movl 1, %eax的区别,前者是将1传送给寄存器eax,后者是将1地址所指向的内存单元内容传送给寄存器eax
2变址寻址
这种寻址方式使用了ADDRESS_OR_OFFSET和%INDEX两个字段,这个INDEX可以是所有的通用寄存器,注意这里和8086的区别。例如:
movl string_start(, %edi, 1), %eax
3间接寻址
这种寻址方式是它的内存地址在一个寄存器中,例如eax寄存器保存内存单元地址,那么我们可以通过movl (%eax), %ebx这样的语句将内存单元的内容加载到ebx寄存器中。
4基地址寻址
movl 4(%eax), %ebx
摘自 mcgrady_tracy的专栏
补充:综合编程 , 其他综合 ,