ARM处理器开发详解

3.1 ARM处理器的寻址方式

ARM的寻址方式分为数据处理指令寻址方式和内存指令寻址方式

3.1.1 数据处理指令寻址方式

数据处理指令的基本语法格式以下:

< opcode> , {< cond>} , {s} , < Rd> , < Rn> , < Shifter_operand>

在这里插入图片描述
数据处理指令寻址方式可以分为以下几种:

1)立即数寻址方式

2)寄存器寻址方式

3)寄存器移位寻址方式

立即数寻址方式

指令中的立即数是由一个8bit的常数移动4bit偶数位(0,2,4,…,26,28,30)得到的。所以,每一条指令都包含一个8bit的常数 和移位值Y,得到的立即数-X循环右移(2XY),如图所示。
在这里插入图片描述

下面列举了一些有效的立即数:
OxFF、0x104,OxFFO,OxFFO0,OxFFO00,OxFFO00000、OxFO0000OF

下面是一些无效的立即数:
0x101.0x102.OxFF1,OxFF04,OxFF003,OxFFFFFFFF,OxFO00001F

在这里插入图片描述
注意,如何判断立即数是否合法:
link

寄存器寻址寻址方式

寄存器的值可以被直接用于数据操作指令,这种寻址方式是各类处理器经常采用的一种方式,也是一种执行效率较高的寻址方式,如:

在这里插入图片描述

寄存器移位寻址方式

寄存器的值在被送到ALU之前,可以事先经过桶形移位寄存器的处理。预处理和移位发生在同一周期内,所以有效地使用移位寄存器,可以增加代码的执行效率。

下面是一些在指令中使用了移位操作的例子:
在这里插入图片描述

3.1.2 内存访问指令寻址方式

内存访问指令的寻址方式分为以下几种。

  1. 字及无符号字节的Load/Store指令的寻址方式。
  2. 杂类Load/Store指令的寻址方式
  3. 批量Load/Store指令的寻址方式
  4. 批处理器Load/Store指令的寻址方式

** 1.字及无符号字节的Load/Store指令的寻址方式**

语法格式为:LDR|STR {<cond>}{B}{T}. <Rd>,<addressing_mode>
其中,<addressing_mode>有九种寻址方式,如表所示

2.杂类Load/Store指令的寻址方式
语法格式:LDR|STR{<cond>}H|SH|SB|D <Rd>,<addressing_mode>
使用该类寻址方式的指令包括(有符号/无符号)半字Loda/Store指令、有符号字节Load/Store指令和双字Load/Store指令。

该类寻址方式分为6种类型,如下表

3.批量Load/Store指令寻址方式
批量Load/Store指令将一片连续内存单元的数据加载到通用寄存器中或将一组通用寄存器的数据储存到内存单元中。

批量Load/Store 指令的寻址方式产生一个内存单元的地址范围,指令寄存器和内存单元的对应关系满足如下规则——编号低的寄存器对应于内存中低地址单元,编号高的寄存器对应于内存中的高地址单元。

该类指令的语法如下:
LDM | STM{<cond>}<addressing_mode> <Rn>{!},<registers><^>
该类指令的寻址方式如图:
在这里插入图片描述

4.堆栈操作寻址方式
堆栈操作寻址方式和批量Load/Store指令寻址方式十分类似。但对于堆栈的操作,数据写入内存和从内存中读出要使用不同的寻址模式,因为进栈操作(pop)和出栈操作(push)要在不同的方向上调整堆栈。
下面详细讨论如何使用合适的寻址方式实现数据的堆栈操作:
根据不同的寻址方式,将堆栈分为以下4种:

  • (1)FUll 栈:堆栈指针指向栈顶元素。

  • (2) Empty 栈:堆栈指针指向第一个可用元素。

  • (3)递减栈:堆栈向内存地址减小的方向生长。

  • (4)递增栈:堆栈向内存地址增加的方向生长。

  • 根据堆栈的不同种类,将其寻址方式分为以下4种。

  • (1)满递减FD(Full Descending)。

  • (2)空递减ED(Empty Descending)。

  • (3)满递增FA(Full Ascending)

  • (4)空递增EA(Empty Ascending)。

下表给出堆栈的寻址方式和批量Load/Store指令寻址方式的关系:
在这里插入图片描述

5.协处理器Load/Store 寻址方式

格式:<opcode>{<cond>} {L} <coproc>,<CRd>,<addressing_mode>

3.2 ARM处理器的指令集

数据操作指令是指对存放在寄存器中的数据进行操作的指令。主要包括数据传送指令、算术指令、逻辑指令、比较与测试指令及乘法指令。
如果在数据处理指令前使用S前缀,指令的执行结果将会影响CPSR中的标志位。
数据处理指令如表所示:
在这里插入图片描述
1、 MOV指令
MOV指令是最简单的ARM指令,执行的结果就是把一个数n送到目标寄存器Rd,其中n可以是寄存器,也可以是立即数。

MOV指令多用于设置初始值或者在寄存器间传送数据。

MOV指令将移位码(shifter-operand)表示的数据传送到目的寄存器Rd,并根据操作的结果更新CPSR中相应的条件标志位。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值