ARM寻址方式
2015-12-11 17:18
190 查看
一。指令从哪里找操作数呢?
通过寻址
二。寻址方式
1.立即数寻址(立即数也不是随便给的,除以4的结果在0-255之间就可以)
操作数本身就在指令中。前面加#
例子:ADD R0,R0,#0x3f;
2.寄存器寻址
操作数在寄存器中。效率较高
例子:ADD R0,R1,R2;
3.寄存器间接寻址
操作数在内存中。加中括号,代表地址
例子:LDR R0,[R2];
LDR{条件} Rd, <地址>
STR{条件} Rd, <地址>
LDR{条件}B Rd, <地址>
STR{条件}B Rd, <地址>
4.基址变址寻址
有两个值,操作数在内存中。基地址加上一个偏移量得到操作数在内存中的地址
例子:LDR R0,[R1,#4];
5.相对寻址
有两个值,操作数在内存中。PC指针当前值为基地址,指令中的地址标号作为偏移量,两个相加得到操作数在内存中的地址
例子:用到跳转指令,NEXT是地址标号
BL NEXT;
…….
NEXT
……..
MOV PC,LR;
通过寻址
二。寻址方式
1.立即数寻址(立即数也不是随便给的,除以4的结果在0-255之间就可以)
操作数本身就在指令中。前面加#
例子:ADD R0,R0,#0x3f;
2.寄存器寻址
操作数在寄存器中。效率较高
例子:ADD R0,R1,R2;
3.寄存器间接寻址
操作数在内存中。加中括号,代表地址
例子:LDR R0,[R2];
LDR{条件} Rd, <地址>
STR{条件} Rd, <地址>
LDR{条件}B Rd, <地址>
STR{条件}B Rd, <地址>
4.基址变址寻址
有两个值,操作数在内存中。基地址加上一个偏移量得到操作数在内存中的地址
例子:LDR R0,[R1,#4];
5.相对寻址
有两个值,操作数在内存中。PC指针当前值为基地址,指令中的地址标号作为偏移量,两个相加得到操作数在内存中的地址
例子:用到跳转指令,NEXT是地址标号
BL NEXT;
…….
NEXT
……..
MOV PC,LR;
相关文章推荐
- BeautifulSoup win+linux 安装配置
- chrome浏览器自动填充表单导致输入框样式改变
- Android Studio环境搭建
- gulp详细入门教程
- 真机测试遇到问题2
- win7系统打开U盘提示“参数错误”怎么办? 如何复制U盘数据?
- 输入H.264流,输出封装格式流
- appium 滑动
- android文件管理器——文件检索
- 中小企业如何进行客户关系管理
- mongoDB的update相关操作
- runtime机制
- 1211-有限自动机的构造与识别
- bzoj-3450 Easy概率DP 【数学期望】
- install wtl9.1 and .lib of debug
- Linux下搭建Swift开发环境
- UICollectionView的用法小结
- MySQL中涉及的几个字符集
- 解决DEDECMS Call to undefined function dede_htmlspecialchars()错误
- 左侧固定宽度-右侧自适应布局