标题: ARM指令集-ARM指令格式 [打印本页]
作者: look_w 时间: 2017-9-24 15:28 标题: ARM指令集-ARM指令格式
3.1 ARM处理器的指令格式3.1.1 ARM指令集的特点ARM内核属于RISC结构,所以其指令集有着一些独特的特点:指令长度固定,指令格式的种类少,寻址方式简单。由于ARM处理器采用固定长度的32位指令,因此处理器内部硬件设计能够被简化。ARM处理器内部的指令译码采用硬布线逻辑,不使用微程序控制,以减少指令的译码时间,大部分指令可以在一个时钟周期内完成。
ARM处理器的指令按功能可分为七大类:加载/存储指令、数据处理指令、乘法指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常中断指令。
需要特别指出的是,ARM处理器的指令集是加载/存储型的,也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。
按照操作数的特点分,ARM指令可以分为无操作数指令、单操作数指令、双操作数指令和三操作数指令。每条指令都由操作码域、条件码域、条件码设置域、目标操作数、第一操作数寄存器和第二操作数组成。
3.1.2 ARM指令的格式每条ARM指令都是32位的,其格式如下:
31 28 27 25 24 21 20 19 16 15 12 11 0
条件码
| 类别码
| 操作码
| S
| 目的寄存器
| 第一操作数
| 第二操作数
|
用ARM指令助记符表示为:
<opcode> {<cond>} {S} <Rd>, <Rn>, <shift_op2>
每个域的含义如下:
1) <opcode>:操作码域,指令编码的助记符;
2) {<cond>}:条件码域,指令允许执行的条件编码。花括号表示此项可缺省。
ARM指令的一个重要特点是可以条件执行,每条ARM指令的条件码域包含4位条件码,共16种。几乎所有指令均根据CPSR中条件码的状态和指令条件码域的设置有条件的执行。当指令执行条件满足时,指令被执行,否则被忽略。指令条件码及其助记符后缀表示参见表3.1。
每种条件码可用两个字符表示,这两个字符可以作为后缀添加在指令助记符的后面和指令同时使用。例如,跳转指令B可以加上后缀EQ变为BEQ,表示“相等则跳转”,即当CPSR中的Z标志置位时发生跳转。
表3.1 指令的条件码
条件码
| 助记符后缀
| 标 志
| 含 义
|
0000
| EQ
| Z置位
| 相等
|
0001
| NE
| Z清零
| 不相等
|
0010
| CS
| C置位
| 无符号数大于或等于
|
0011
| CC
| C清零
| 无符号数小于
|
0100
| MI
| N置位
| 负数
|
0101
| PL
| N清零
| 正数或零
|
0110
| VS
| V置位
| 溢出
|
0111
| VC
| V清零
| 未溢出
|
1000
| HI
| C置位Z清零
| 无符号数大于
|
1001
| LS
| C清零Z置位
| 无符号数小于或等于
|
1010
| GE
| N等于V
| 带符号数大于或等于
|
1011
| LT
| N不等于V
| 带符号数小于
|
1100
| GT
| Z清零且(N等于V)
| 带符号数大于
|
1101
| LE
| Z置位或(N不等于V)
| 带符号数小于或等于
|
1110
| AL
| 忽略
| 无条件执行
|
3) {S}:条件码设置域。这是一个可选项,当在指令中设置{S}域时,指令执行的结果将会影响程序状态寄存器CPSR中相应的状态标志。
例如:
ADD R0,R1,R2; R1与R2的和存放到R0寄存器中,不影响状态寄存器
ADDS R0,R1,R2; 执行加法的同时影响状态寄存器
指令中比较特殊的是CMP指令,它不需要加S后缀就默认地根据计算结构更改程序状态寄存器。
4) <Rd>:目的操作数。ARM指令中的目的操作数总是一个寄存器。如果<Rd>与第一操作数寄存器<Rn>相同,也必须要指明,不能缺省。
5) <Rn>:第一操作数。ARM指令中的第一操作数也必须是个寄存器。
6) <shift_op2>:第二操作数。在第二操作数中可以是寄存器、内存存储单元或者立即数。
由于第二操作数只有12个bit,用第二操作数表示立即数时,其取值范围为0~212-1,要表示超出这个范围的立即数,通常要依靠伪指令实现。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |