AT&T寻址

格式

segreg(段基址):base_address(offset_address,index,size)
该格式对应的表达式为:
segreg(段基址):base_address+ offset_address+ index*size

总结:任意一种内存寻址方式,其格式都是这个通用格式的子集,都是格式中各种成员的组合

成员项介绍

base_address 是基地址,可以为整数、变量名,可正可负。
offset_address 是偏移地址,index 是索引值,这两个必须是那 8 个通用寄存器之一。
size 是个长度,只能是 1、2、4、8(Intel 语法中也是只能乘以这 4 个数)。

寻址方式

直接寻址:此寻址中只有 base_address 项

movl $2550xc00008F0
movl $6,var

寄存器间接寻址:此寻址中只有 offset_address 项,即格式为(offset_address),不要忘记格式中的圆括号,如 mov (%eax), %ebx

**寄存器相对寻址:**此寻址中有 offset_address 项base_address 项,即格式为 base_address(offset_address)

movb -4(%ebx),%al

变址寻址:此类寻址称为变址的原因是含有通用格式中的变量 Index。因为 index 是 size 的倍数,所以有 index 的地方就有 size。既然是变址,只要有 index 和 size 就成了,base_address 和 offset_address 可有可无,注意,格式中没有的部分也要保留逗号来占位。一共有 4 种变址寻址组合,下面各举个例子。

无 base_address,无 offset_address:
movl %eax,(,%esi,2) 
功能是将 eax 的值写入 esi*2 所指向的内存。
无 base_address,有 offset_address:
movl %eax,(%ebx,%esi,2) 
功能是将 eax 的值写入 ebx+esi*2 所指向的内存。
有 base_address,无 offset_address:
movl %eax,base_value(,%esi,2) 
功能是将 eax 的值写入 base_value+esi*2 所指向的内存。
有 base_address,有 offset_address:
movl %eax,base_value(%ebx,%esi,2) 
功能是将 eax 的值写入 base_value+ebx+esi*2 所指向的内存。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值