嵌入式系统(三):ARM 指令汇编(2)

2.ARM微处理器的指令系统

ARM微处理器的指令集是加载/存储型的,即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。

ARM微处理器的指令集可以分为六大类 :
跳转指令
数据处理指令
程序状态寄存器(PSR)处理指令
加载/存储指令
协处理器指令
异常产生指令

(1)ARM指令格式

ARM指令的基本格式如下:
在这里插入图片描述
其中<>号内的项是必须的,{}号内的项是可选的。各项的说明如下:
在这里插入图片描述

(2)第二操作数的灵活使用

第二个操作数有很大的灵活性,灵活的使用它能够提高代码效率。它有如下形式

① #immed_8r——常数表达式;

该常数必须对应8位位图(32位中只能有八位有效位,剩下的左右侧都为0),即必须是一个8位的常数通过循环右移偶数位可以得到的数。(注意三个条件,移位前只能有8位,必须移动偶数位)
在这里插入图片描述
Why?–整个指令只有32位,一个数字不能占用太多,因此数字必须在8位,移动偶数位是规定的。

② Rm——寄存器方式;

在寄存器方式下,操作数即为寄存器的数值。
例如:
SUB R1,R1,R2
MOV PC,R0

③ Rm,shift——寄存器移位方式;

将寄存器的移位结果作为操作数,但Rm值保持不变,移位方法如下:
在这里插入图片描述
逻辑左移:logic,left,LSL:寄存器中字的低端空出的位补0
逻辑右移:LSR:寄存器中字的高端空出的位补0
ASR:移位过程中保持符号位不变;
ROR:由字的低端移出的位填入字的高端
RRX:操作数右移1位,高端空出的位用原C(程序状态字)标志值填充,C标志值用移出的最低位填充

(3)条件码

在这里插入图片描述
使用条件码“cond”可以实现高效的逻辑操作,提高代码效率。

绝大部分的ARM指令都可以条件执行,而Thumb指令只有B(跳转)指令具有条件执行功能。如果指令不标明条件代码,将默认为无条件(AL)执行。
在这里插入图片描述在这里插入图片描述

(4)ARM指令种类

① 存储器访问指令

ARM处理器是典型的RISC处理器,对存储器的访问只能使用加载和存储指令实现。存储器访问指令分为单寄存器操作指令多寄存器操作指令

② 单寄存器存取

在这里插入图片描述
通过添加后缀实现各种方式的存取
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

i.地址形式

在这里插入图片描述
.这些地址应该如何表示出来呢?R0:基址寄存器
在这里插入图片描述
在这里插入图片描述
注意他们的形式,中括号出现的位置很重要。感叹号的意思是,将RN+OX04传送过后,给RN的内容加上这个值。没有感叹号的话,Rn本身的内容不要更改。

③ 多寄存器存取

多寄存器加载/存储指令可以实现在一组寄存器和一块连续的内存单元之间传输数据。LDM为加载多个寄存器;STM为存储多个寄存器。允许一条指令传送16个寄存器的任何子集或所有寄存器。它们主要用于现场保护、数据复制、常数传递等。
在这里插入图片描述
他也可以搭配不同的指令实现不同的地址增长方式。在这里插入图片描述
IA:increase after IB:increase before 传送前增加,传送后增加
DA:decrease after

ii.传输实例

在这里插入图片描述
IB,DB在数据传输前进行地址的加减,因为一个存储单元32位,4字节,因此每次+or-4.相反,IA,DA在数据传输完成后进行地址的加减。
在这里插入图片描述
注意无论是LDM还是STM,改变地址值的都是R1,装载时R1的地址不断增加,每增加一次将内容传入到其中一个目的寄存器。而在STM中,R1每增加一次,就将一个源寄存器的值装载到R1当前的地址上。

iii.多寄存器存取与堆栈操作指令

在这里插入图片描述
FD:FULL Decrease ED:empty decrease
在这里插入图片描述
由于是压栈操作,我们先存储LR,再存储R7-R0,存储顺序与列表顺序恰好相反。STM指令使用了FD后缀,full increase,full代表了,堆栈指针指向堆栈的最顶部元素,D代表了每次操作结束,SP指向的地址值-4.因此会产生如下的结果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值