Linux下汇编学习-3寻址方式

同intel汇编寻址方式都是一样的,只是语法上有点区别。通用的寻址格式如下:
ADDRESS_OR_OFFSET(%BASE_OR_OFFSET, %INDEX, MULTIPLIER)
最终的寻址地址为:
FINAL ADDRESS = ADDRESS_OR_OFFSET + %BASE_OR_OFFSET + MULTIPLIER * %INDEX
其中ADDRESS_OR_OFFSET、MULTIPLIER都是常量,另外两个必须是寄存器,还有其中一些字段是可以省略的,省略掉的字段相当于用0代替。

1. 直接寻址
这种寻址方式相当于只使用了ADDRESS_OR_OFFSET字段,寻址格式如下:
movl ADDRESS, %eax
例如:
movl 0x0100, %eax
intel语法是:
mov eax, [0100]

2. 变址寻址
这里只用到了ADDRESS_OR_OFFSET和%INDEX两个字段,INDEX可以是所有的通用寄存器,也同样可以包含MULTIPLIER字段,例如1, 2, 4,还是来看实际的例子吧(maximum.s):
movl $0, %edi
movl data_items(,%edi,4), %eax
data_items在高级语言中可以叫做数组吧,这里相当于把数组中的第一个元素拷贝到eax寄存器中。因为data_items定义为long类型,如果edi值为1呢,那么movl data_items(,%edi,4), %eax这句话相当于把数组中的第二个元素拷贝到
寄存器eax中,所以这种寻址方式适用于遍历数组。

3. 间接寻址
地址在寄存器中,例如:
movl (%eax), %ebx
同intel语法为:
mov eax, [esi]

4. 基址寻址
类似于间接寻址,例如:
movl 4(%eax), %ebx
intel语法为:
mov eax, [ebp-8]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值