一、现在先委任下ARM指令集与Thumb指令集
Thumb 指令能够看作是 ARM 指令紧缩方法的子集,是针对代码密度的问题而提出的,它具有 16 位的代码密度可是它不如ARM指令的效率高 .Thumb 不是一个完好的体系结构,不能盼望处理只碑文Thumb 指令而不支撑 ARM 指令集.因而,Thumb 指令只需要支撑通用功用,必要时能够借助于完善的 ARM 指令集,比方,一切反常主动进入 ARM 状况.在编写 Thumb 指令时,先要运用伪指令 CODE16 声明,而且在 ARM 指令中要运用 BX指令跳转到 Thumb 指令,以切换处理器状况.编写 ARM 指令时,则可运用伪指令 CODE32声明.
流水线处理:
不同于微编码的处理器,ARM (坚持它的 RISC 性)是彻底硬布线的。
为了加快 ARM 2 和 3 的碑文运用 3 阶段流水线。第一阶段持有从内存中取回的指令。第二阶段开端解码,而第三阶段实践碑文它。故此,程序计数器总是超出当时碑文的指令两个指令。(在为分支指令核算偏移量时有必要核算在内)。
由于有这个流水线,在分支时丢掉 2 个指令周期(由于要从头添满流水线)。所以最好运用条件碑文指令来防止糟蹋周期。例如:
…
CMP R0,#0
BEQ over
MOV R1,#1
MOV R2,#2
over
…
能够写为更有用的:
…
CMP R0,#0
MOVNE R1,#1
MOVNE R2,#2
二、Thumb 指令集与 ARM 指令集的差异
Thumb 指令集没有协处理器指令,信号量指令以及拜访 CPSR 或 SPSR 的指令,没有乘加指令及 64 位乘法指令等,且指令的第二操作数遭到约束;除了跳转指令 B 有条件碑文功用外,其它指令均为无条件碑文;大多数 Thumb 数据处理指令选用 2 地址格局.Thumb指令集与 ARM 指令的差异一般有如下几点:
跳转指令
程序相对搬运,特别是条件跳转与 ARM 代码下的跳转比较,在规模上有更多的约束,转向子程序是无条件的搬运.
数据处理指令
数据处理指令是对通用寄存器进行操作,在大多数情况下,操作的成果须放入其间一个操作数寄存器中,而不是第 3 个寄存器中.数据处理操作比 ARM 状况的更少,拜访寄存器 R8~R15 遭到必定约束.除 MOV 和 ADD 指令拜访器 R8~R15 外,其它数据处理指令总是更新 CPSR 中的 ALU 状况标志.拜访寄存器 R8~R15 的 Thumb 数据处理指令不能更新 CPSR 中的 ALU 状况标志.
单寄存器加载和存储指令
在 Thumb 状况下,单寄存器加载和存储指令只能拜访寄存器 R0~R7
批量寄存器加载和存储指令
LDM 和 STM 指令能够将任何规模为 R0~R7 的寄存器子集加载或存储. PUSH 和 POP 指令运用仓库指令 R13 作为基址完成满递减仓库.除 R0~R7 外,PUSH 指令还能够存储链接寄存器 R14,而且 POP 指令能够加载程序指令PC
ARM指令分为以下几种:
一、ARM 存储器拜访指令
助记符 阐明 操作 条件码方位
LDR Rd,addressing 加载字数据 Rd←[addressing],addressing 索引 LDR{cond}
LDRB Rd,addressing 加载无符字节数据 Rd←[addressing],addressing 索引 LDR{cond}B
LDRT Rd,addressing 以用户形式加载字数据 Rd←[addressing],addressing 索引 LDR{cond}T
LDRBT Rd,addressing 以用户形式加载无符号字数据 Rd←[addressing],addressing 索引 LDR{cond}BT
LDRH Rd,addressing 加载无符半字数据 Rd←[addressing],addressing 索引 LDR{cond}H
LDRSB Rd,addressing 加载有符字节数据 Rd←[addressing],addressing 索引 LDR{cond}SB
LDRSH Rd,addressing 加载有符半字数据 Rd←[addressing],addressing 索引 LDR{cond}SH
STR Rd,addressing 存储字数据 [addressing]←Rd,addressing 索引 STR{cond}
STRB Rd,addressing 存储字节数据 [addressing]←Rd,addressing 索引 STR{cond}B
STRT Rd,addressing 以用户形式存储字数据 [addressing]←Rd,addressing 索引 STR{cond}T
SRTBT Rd,addressing 以用户形式存储字节数据 [addressing]←Rd,addressing 索引 STR{cond}BT
STRH Rd,addressing 存储半字数据 [addressing]←Rd,addressing 索引 STR{cond}H
LDM{mode} Rn{!},reglist 批量(寄存器)加载 reglist←[Rn…],Rn 回存等 LDM{cond}{more}
STM{mode} Rn{!},rtglist 批量(寄存器)存储 [Rn…]← reglist,Rn 回存等 STM{cond}{more}
SWP Rd,Rm,Rn 寄存器和存储器字数据交换 Rd←[Rd],[Rn]←[Rm](Rn≠Rd 或 Rm) SWP{cond}
SWPB Rd,Rm,Rn 寄存器和存储器字节数据交换 Rd←[Rd],[Rn]←[Rm](Rn≠Rd 或 Rm) SWP{cond}B
二、ARM 数据处理指令
助记符号 阐明 操作 条件码方位
MOV Rd ,operand2 数据转送 Rd←operand2 MOV {cond}{S}
MVN Rd ,operand2 数据非转送 Rd←(operand2) MVN {cond}{S}
ADD Rd,Rn operand2 加法运算指令 Rd←Rn+operand2 ADD {cond}{S}
SUB Rd,Rn operand2 减法运算指令 Rd←Rn-operand2 SUB {cond}{S}
RSB Rd,Rn operand2 逆向减法指令 Rd←operand2-Rn RSB {cond}{S}
ADC Rd,Rn operand2 带进位加法 Rd←Rn+operand2+carry ADC {cond}{S}
SBC Rd,Rn operand2 带进位减法指令 Rd←Rn-operand2-(NOT)Carry SBC {cond}{S}
RSC Rd,Rn operand2 带进位逆向减法指令 Rd←operand2-Rn-(NOT)Carry RSC {cond}{S}
AND Rd,Rn operand2 逻辑与操作指令 Rd←Rn&operand2 AND {cond}{S}
ORR Rd,Rn operand2 逻辑或操作指令 Rd←Rn|operand2 ORR {cond}{S}
EOR Rd,Rn operand2 逻辑异或操作指令 Rd←Rn^operand2 EOR {cond}{S}
BIC Rd,Rn operand2 位铲除指令 Rd←Rn&(~operand2) BIC {cond}{S}
CMP Rn,operand2 比较指令 标志 N、Z、C、V←Rn-operand2 CMP {cond}
CMN Rn,operand2 负数比较指令 标志 N、Z、C、V←Rn+operand2 CMN {cond}
TST Rn,operand2 位测验指令 标志 N、Z、C、V←Rn&operand2 TST {cond}
TEQ Rn,operand2 持平测验指令 标志 N、Z、C、V←Rn^operand2 TEQ {cond}
三、乘法指令
具有 32×32 乘法指令,32×32 乘加指令,32×32 成果为 64 位的乘/乘法指令.
助记符 阐明 操作 条件码方位
MUL Rd,Rm,Rs 32 位乘法指令 Rd←Rm*Rs (Rd≠Rm) MUL{cond}{S}
MLA Rd,Rm,Rs,Rn 32 位乘加指令 Rd←Rm*Rs+Rn (Rd≠Rm) MLA{cond}{S}
UMULL RdLo,RdHi,Rm,Rs 64 位无符号乘法指令 (RdLo,RdHi)←Rm*Rs UMULL{cond}{S}
UMLAL RdLo,RdHi,Rm,Rs 64 位无符号乘加指令 (RdLo,RdHi)←Rm*Rs+(RdLo,RdHi) UMLAL{cond}{S}
SMULL RdLo,RdHi,Rm,Rs 64 位有符号乘法指令 (RdLo,RdHi)←Rm*Rs SMULL{cond}{S}
SMLAL RdLo,RdHi,Rm,Rs 64 位有符号乘加指令 (RdLo,RdHi)←Rm*Rs+(RdLo,RdHi) SMLAL{cond}{S}
四、跳转指令
在 ARM 中有两种方法能够完成程序的跳转,一种是运用跳转指令直接跳转,另一种则是直接向 PC 寄存器赋值完成跳转.
助记符 阐明 操作 条件码方位
B label 跳转指令 Pc←label B{cond}
BL label 带链接的跳转指令 LR←PC-4, PC←label BL{cond}
BX Rm 带状况切换的跳转指令 PC←label,切换处理状况 BX{cond}
五、ARM协处理器指令
ARM 支撑协处理器操作,协处理器的操控要经过协处理器指令完成.
助记符 阐明 操作 条件码方位
CDP
coproc,opcodel,CRd,CRn,CRm{,opcode2} 协处理器数据操作指令 取决于协处理器 CDP{cond}
LDC{L} coproc,CRd〈地址〉 协处理器数据读取指令 取决于协处理器 LDC{cond}{L}
STC{L} coproc,CRd,〈地址〉 协处理器数据写入指令 取决于协处理器 STC{cond}{L}
ARM 寄存器到协处理器
MCR coproc, opcodel,Rd,CRn,{,opcode2} 寄存器的数据传送指令 取决于协处理器 MCR{cond}
协处理器寄存器到 ARM
MRC coproc, opcodel,Rd,CRn,{,opcode2} 寄存器到数据传送指令 取决于协处理器MCR{cond}
五、ARM 杂项指令
助记符 阐明 操作 条件码方位
SWI immed_24 软中止指令 发生软中止,处理器进入管理形式 SWI{cond}
MRS Rd,psr 读状况寄存器指令 Rd←psr,psr 为 CPSR 或 SPSR MRS{cond}
MSR psr_fields,Rd/#immed_8r 写状况寄存器指令 psr_fields←Rd/#immed_8r,psr 为 CPSR 或 SPSR MSR{cond}