arm学习笔记二(arm寻址方式)

工作状态
arm状态 32位指令
thumb状态 16位指令


存储器的格式
最大寻址空间为4gb
大端格式:字数据的高字节存储在低地址中,低字节存放在高地址中
小端格式:与大端格式相反


axd查看寄存器


=================================================================
arm寻址方式(貌似计算机原理中学过)
处理器根据指令中给出的地址信息来寻找物理地址的方式




立即寻址
立即数寻址
示例代码如下:
add r0,r0,#1; r0<--r0+1
add r0,r0,#0x3f; r0<--r0+0x3f 以十六进制表示的立即数要加0x或&




寄存器寻址
利用寄存器中的数值作为操作数
示例代码如下:(将r1和r2中的内容相加,结果存放在寄存器r0中)
add r0,r1,r2; r0<--r1+r2






寄存器间接寻址
以寄存器中的值作为操作数的地址,操作数存放在存储器中
示例代码如下:
add r0,r1,[r2]; r0<--r1+[r2]
ldr r0,[r1]; r0<--[r1]




基址变址寻址
将寄存器的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址
示例代码如下:
ldr r0,[r1,#4]; r0<--[r1+4]
ldr r0,[r1,#4]!; r0<--[r1+4],r1<--r1+4
ldr r0,[r1],#4; r0<--[r1],r1<--r1+4
ldr r0,[r1,r2]; r0<--[r1+r2]




多寄存器寻址
一条指令可以完成多个寄存器值的传送,最多16个通用寄存器
示例代码如下:
ldmia r0,{r1,r2,r3,r4}; r1<--[r0]
; r2<--[r0+4]
; r3<--[r0+8]
; r4<--[r0+12]
ia表示每次在执行完加载、存储操作后,r0按字长度增加,可将连续存储单元的值
传送到r1-r4


相对寻址
以程序计数器pc的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到的操作数的有效地址
示例代码如下:
bl next; 跳转到子程序next的执行处
next
mov pc,lr; 从子程序返回




堆栈寻址
按先进先出的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置
递增堆栈
递减堆栈
满堆栈
空堆栈

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值