AT&T寻址方式

AT&T寻址方式

最近在看AT&T汇编,由于跟Intel汇编还有些许区别,所以对一些寻址方式稀里糊涂的,去网上查阅发现几乎都是一个模子的,自己参考总结了一下。为了方便记忆,就对照着Intel的寻址方式,结合着自己的理解总结的,可能有些地方和官方略有不同。
参考:https://blog.csdn.net/kuaizaifeng_1991/article/details/75807676

基本公式:相对地址(%基址寄存器,%变址寄存器,比例因子)

1.立即数寻址
movl $2, %ebx

将立即数2放入ebx寄存器中

2.直接寻址
movl 0x8000, %eax

将地址为0x8000的内容放入ebx寄存器中

3.寄存器间接寻址
# 假如ebx寄存器中已存放了0x8000
movl %ebx, %eax

将寄存器ebx中的内容0x8000作为地址,再将地址为0x8000的内容放入eax寄存器中

4.寄存器相对寻址
# 假如ebx寄存器中已存放了0x8000
movl 2(%ebx), %eax

将地址为0x8002(2+0x8000,2为相对地址,是一个常量;ebx中存放的内容是为基址,是一个变量)的内容放入eax寄存器中

5.基址变址寻址
# 假如ebx寄存器中已存放了0x8000,eax寄存器中已存放了0x4
movl (%ebx, %eax), %ecx

将地址为0x8004(0x8000 + 0x4,ebx中存放的内容是为基址,是一个变量;eax中存放的内容为变址,是一个变量)的内容放入ecx寄存器中

# 假如ebx寄存器中已存放了0x8000,eax寄存器中已存放了0x4
movl 2(%ebx, %eax), %ecx

将地址为0x8006(2 + 0x8000 + 0x4,2为相对地址,是一个常量;ebx中存放的内容是为基址,是一个变量;eax中存放的内容为变址,是一个变量)的内容放入ecx寄存器中

6.比例基址变址寻址
# 假如ebx寄存器中已存放了0x1000
movl ( , %eax, 4), %ecx

将地址为0x4000(0x1000 * 4,eax中存放的内容为变址,是一个变量;4为比例因子)的内容放入ecx寄存器中

# 假如ebx寄存器中已存放了0x1000,eax寄存器中已存放了0x2000
movl (%ebx, %eax, 4), %ecx

将地址为0x6000(0x2000 + 0x1000 * 4,ebx中存放的内容是为基址,是一个变量;eax中存放的内容为变址,是一个变量;4为比例因子)的内容放入ecx寄存器中

# 假如ebx寄存器中已存放了0x1000,eax寄存器中已存放了0x2000
movl 2(%ebx, %eax, 4), %ecx

将地址为0x6002(2 + 0x2000 + 0x1000 * 4,2为相对地址,是一个常量;ebx中存放的内容是为基址,是一个变量;eax中存放的内容为变址,是一个变量;4为比例因子)的内容放入ecx寄存器中

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值