ARM汇编寻址方式详解

 

  寻址方式在C语言里面也可以称为一个内存操作,说到寻址方式,我们就会想哪里有地址,当然就是存储器,而存储器就包括内存,外存,外存就比如硬盘,内存就比如寄存器。也就是说我们想操作它们要怎么去寻址,现在我把常用的ARM寻址方式做了一个总结。

  1,立即数寻址:常量寻址,比如“ADD R0,R0,#0X3F”也就是操作,条件,状态,Rd(目标寄存器)Rn(原寄存器),操作数这六个部分,对比来说就是把R0自己加上0x3F这样一个立即数,并且把加上的值还是给它自己。这是最简单的寻址方式。

  2,寄存器寻址:比如“ADD R0,R1,R2”就是R1R2,然后在把值存给R0。这个时候我们实际上就是去寻找寄存器,所以称为寄存器寻址。

  3,寄存器间接寻址:比如“LDR R0,R1”“STR R0R1“LDR”“STR”就是操作把数据在内存和寄存器之间进行传递的,通过它们我们才能访问内存地址。“LDR R0,R1意思就是把R1里面所指向的内存地址的值赋到R0。比如说R1里面的值是0*00000103,它不会直接拷贝,因为它会把这个值当做内存里面的地址,然后去地址里面找值,然后在给R0。同样STR也是这样一个道理。“STR R0,R1是把R0的值放到R1的内存地址里面去。

  4,寄存器移位寻址:这个又设计到位运算,就要记住向左是乘向右是除,“ADD R3,R2,R1,LSL #2”这个指令如果抛开LSL后面这一段,就是把R1R2R3,加上LSL #2就表示左移两个立即数。也就表示R1左移两位再加R2然后在给R3

  5,基址地址寻址:“LDR R0,R1#4也就是说把R1里面的值加上4这样的立即数所指向的地址,然后在给它读到它所指向的地址R0“LDR R0,R1#4”这个就是R1所指向的内存地址,取出里面的值,然后再加上这个立即数4,然后再给R0“LDR R0,R1,R2”R1的值加上R2的值,再去找这个所指向的内存然后给R0

  6,多寄存器寻址:“LDMIA R0,{R1,R2,R3,R4}”就是批量操作。

  7,相对寻址:与跳转相关“BL NEXT”就表示跳转到NEXT,并且把当前的状态保存到寄存器里面。“MOV PC,LR”MOV后面跟的是LR,也就表示子函数的返回调用,所以它也有一个跳转的作用,也就是相当于一个子程序的返回。

  就是用数值去除以四,然后最后能够整除在025之间的就是有效的,因为它是要向右位移偶数位,从进位上看,向左移是乘,向右移就是除。

 

 

原文链接:http://www.maiziedu.com/wiki/arm/way/

转载于:https://www.cnblogs.com/maizi008/p/7592208.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值