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

2022-12-15 12:17:21 来源:51CTO博客

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


(资料图片)

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

指令分类及指令格式

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

指令格式中符号说明:

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

立即数操作

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

条件域表1
条件域表2

条件执行

所有的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指令都具有不同的二进制编码方式,和不同的指令功能相对应 。编码表如下:

参考文献:

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

标签: 无符号数 数据处理 指令格式

上一篇:es磁盘使用为啥这么不均匀
下一篇:C语言-操作符详解