arm芯片汇编寻址方式,xcode中反汇编举例证明

47 篇文章 1 订阅
22 篇文章 5 订阅


跟x86汇编差不多,但是通用寄存器不一样
格式: 指令码 指令格式条件码 目标寄存器 ,源操作数1,源操作数2

立即数寻址 add R0,R0,#10.

把R0+10 赋值给R0
下面截图xcode中的反汇编
在这里插入图片描述
上面例子,xcode里面反汇编了main函数里面,add x29,sp,#0x20,是把 sp里的值 + 0x20 = 10进制的 32 ,然后复制给 x29,用
打印sp的值 p $sp
(unsigned long) $0 = 6171915024
6171915024 + 32 = 6171915056 ,然后把6171915056 赋值给x29
下面打印寄存器证明,计算结果正确,如下图:
在这里插入图片描述

寄存器寻址 add R0,R1,R2

把 R1+ R2赋值给R0

寄存器间接寻址:ldr R0,[R1]

[]中括号是取出存在地址里面的值, [R1]就是取出R1地址里面的值,然后放进R0.举例如下:
如下例子:
在这里插入图片描述

ldr x0, [x0]
打印 x0 = 4294983680
[x0]是取出里面的地址:
先转换成16进制 4294983680 =0x100004000
然后查看 0x100004000 地址里面的内容
查看地址内容命令,x/2w ,2是长度. x/2w 0x100004000
得到结果是 0x09743d78 0x00000002
在这里插入图片描述

然后我们运行运行一行,执行完以后查看x0的结果, 看看里面存储的是什么,p $x0
(lldb) p $x0
(unsigned long) $2 = 8748547448 ,转换成16进制是 0x209743D78 ,正好等于上面的 0x09743d78 0x00000002 ,02是进位以后的,放在高地址
xcode下运行截图如下:
在这里插入图片描述

基址变址寻址:

前索引 ldr r0,[r1,#10]

把r1 + 10 的地址,取出来值,放到 r0 ,[r1 ,#10]就是r1+ 10再,取地址里的值

自动索引 ldr r0,[r1,#4]!

在前索引基础上,新地址再写入r1,所有过程是: r1 + 4的地址,取出来值,写入r0,然后r1 = r1 + 4

后索引 ldr r0,[r1],#4

把 r1里面地址的内容赋值给r0 ,然后 r1 = r1 + 4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值