查看原文
其他

【ARM指令】LDR STR指令的N种寻址姿势

2017-10-04 爱吃菠菜 看雪学院



但愿人长久

天涯共明月

前言



    指令集版本: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,

更多干货等着你~


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存