嵌入式:ARM指令集分类及编码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式:ARM指令集分类及编码相关的知识,希望对你有一定的参考价值。

ARM指令集是32位的,程序的启动都是从ARM指令集开始。主要是以下三个方面:

  • 指令分类及指令格式
  • 条件执行
  • 指令集编码

指令分类及指令格式

ARM指令使用的基本格式如下:
〈opcode〉〈cond〉 S 〈Rd〉,〈Rn〉,〈operand2〉
< > 是必须项 , 是可选项

嵌入式:ARM指令集分类及编码_指令集

指令格式中符号说明:

opcode操作码;指令助记符,如ADD、STR等。
cond 可选的条件码;执行条件,如EQ、NE等。
S 可选后缀;若指定“S”,则根据指令执行结果更新CPSR中的条件码。
Rd 目标寄存器。
Rn 存放第1操作数的寄存器。
op2 第2个操作数。

立即数操作

在数据处理指令中,第二操作数除了可以是寄存器,还可以是一个立即数。如果我们只是希望把一个常数加到寄存器,而不是两个寄存器相加,我们可以用立即数值取代第二操作数,如下面例子。立即数用前面加一个“#”的数值常量来表示。
ADD R3, r3,#1 ;r3 := r3 + 1
AND R8, r7,#& ff ;r8 := r7[7:0]

寄存器移位操作

在ARM数据处理指令中,第二操作数还有一种特有的形式-寄存器移位操作,即允许第二个寄存器操作数在同第一操作数运算之前完成移位操作,例如:
ADD r3, r2,r1,LSL #3 ;r3:=r2 + 8 × r1

设置条件码

ARM的任何数据处理指令都能通过增加“S”操作码来设置条件码(N,Z,C和V)
数据处理指令加了“S”后,算术操作(在此包含CMP和CMN)根据算术运算的结果设置所有的标志位

CPSR和SPSR的格式

嵌入式:ARM指令集分类及编码_操作数_02

条件域表1

嵌入式:ARM指令集分类及编码_ARM_03

条件域表2

嵌入式:ARM指令集分类及编码_ARM_04

条件执行

所有的ARM指令集都可以是有条件执行的。
ARM指令根据CPSR中的条件位自动判断是否执行指令,在条件满足时,指令执行,否则指令被忽略。
在ARM的指令编码表中,统一占用编码的最高四位[31:28]来表示“条件码”(即“cond”)。

条件转移

转移

解释

一般应用

BBAL

无条件的总是

总是执行转移总是执行转移

BEQ

相等

比较的结果为相等或零

BNE

不等

比较的结果为不等或非零

BPL

结果为正数或零

BMIBCC

无进位

结果为负数算术操作未得到进位

BLO

低于

无符号数比较,结果为低于

BCSBHS

有进位高于或相等

算术操作得到了进位无符号数比较,结果为高于或相等

BVC

无溢出

有符号整数操作,未出现溢出

BVS

有溢出

有符号整数操作,出现溢出

BGT

大于

有符号整数比较,结果为大于

BGE

大于或相等

有符号整数比较,结果为大于或相等

BLT

小于

有符号整数比较,结果为小于

BLE

小于或相等

有符号整数比较,结果为小于或相等

BHI

高于

无符号数比较,结果为高于

BLS

低于或相等

无符号数比较,结果为低于或相等

ARM指令集编码

ARM指令集是以32位二进制编码的方式给出的,大部分的指令编码中定义了第一操作数、第二操作数、目的操作数、条件标志影响位以及每条指令所对应的不同功能实现的二进制位。每条32位ARM指令都具有不同的二进制编码方式,和不同的指令功能相对应 。编码表如下:

嵌入式:ARM指令集分类及编码_指令集_05

参考文献:

孟祥莲.嵌入式系统原理及应用教程(第2版)[M].北京:清华大学出版社,2017.

以上是关于嵌入式:ARM指令集分类及编码的主要内容,如果未能解决你的问题,请参考以下文章

ARM汇编求正数负数个数

Apple移动设备处理器指令集 armv6armv7armv7s及arm64

嵌入式:ARM内嵌汇编及C和ARM汇编相互调用

ARM指令的一般编码格式如下

ARM指令的一般编码格式如下

用ARM实现音乐电子相册