【ARM指令】LDR STR指令的N种寻址姿势
但愿人长久
天涯共明月
前言
指令集版本:arm v5te 32bit
LDR&STR指令分为两大类,
一种是操作32bit字数据 或 8bit无符号字节数据的,
另一种是操作16bit半字数据 或 8bit有符号字节数据的。
这里先只讲第一类,LDR LDRB这种。(LDR R0, [R1, # 4] ; LDRB R0, [R1, # 4])
概念
看不懂不要紧,可以分析实例后再回头看概念对号入座
1 指令格式:
LDR {cond} {B} {T} <Rd>,{address_mode}
LDR {条件码} {字/无符号字节} {是否有 ! } <目标寄存器>,{第二个操作数的内存地址}
2 Load/Store指令由两部分组成
基址寄存器Rn与地址偏移量
3 地址偏移量分为三种形式(地址偏移量形式相同的指令,机器码数据结构相同)
(1)立即数
(2)寄存器
(3)寄存器及移位常数
4 地址计算方法分为三种
(1)偏移量方法
(2)事先更新(事先:先计算偏移,再访问内存,最后更新基址寄存器)
(3)事后更新(事后:先访问内存,然后计算新基址寄存器)
实例分析
1 指令的9种格式:
2 用伪代码解释指令的执行过程:
3 关于立即数和移位位数的取值范围
4 表格中同一横排的地址偏移量形式相同,机器码数据结构相同。
5 表格中同一竖排的计算方法相同。
指令的数据结构
1 地址偏移量类型:立即数
2 地址偏移量类型:寄存器
3 地址偏移量类型:寄存器移位常量
4 各bit位的含义:
若有错误希望能指出,共同学习进步~
完
本文由看雪论坛 爱吃菠菜 原创
转载请注明来自看雪社区
祝大家中秋快乐!
热门阅读
点击阅读原文/read,
更多干货等着你~