- ARM由8个部分组成-ALU,barrel shifter,MAC,address decoder, address register, register file,incrementer and sign extend
- ARM具有3个指令集-ARM,Thumb,Jazelle
- Register file 包含了37个寄存器,只有17,18个寄存器在同一时间是可访问的—这取决于ARM所在的模式
- cpsr存放当前处理器的模式。其中包括3部分,interrupt masks,condition flags and state
- Core扩展部分包含了:TCM, Cache,Memory management, Coprocessor
- 一种ARM处理器是一种ISA的具体实现
一、Data Processing Instructions |
- 当你在数据处理指令使用’S’前缀的时候,表示结果会update cpsr寄存器
- Carry是移位出的最后一位
- Negative是第31位上的值
- Zero是当结果为0的时候
指令格式如下,{}表示可选,之后不再解释
< instruction>{< cond>}{S} Rd, N
MOV Rd = N
MVN Rd = ~N
ARM处理器具有pre-processing的预处理能力。能够将32bit二进制数在进入ALU前左移或者右移一定的距离。然而一些数据运算指令例如MUL,CLZ,QADD则不支持barrel shifter(桶移位)
例如:MOV r1,r2,LSL #2
指令如下:
LSL,LSR,ASR,ROR,RRX
ADC
ADD
RSB Rd=N-Rn
RSC
SBC
SUB Rd=Rn-N
* arithmetic instructions使用了内置(inline)的barrel shifter
指令 | 解释 | 使用 |
---|
AND | bitwise | |
ORR | bitwise | |
EOR | exclusive(not including sth) OR | Rd = Rn^N |
BIC | bit clear(Not AND),在cpsr中非常有用,用于清除位置。例如:BIC r0,r1,r2 会将R2中为1的位在R0中全部清除为0 | Rd = Rn & ~N |
* 逻辑指令的第二个操作数可以和算术指令一样采用barrel shifter处理
指令 | 解释 | 使用 |
---|
CMN | compare negated | Rn+N |
CMP | compare | Rn-N |
TEQ | exclusive OR | Rn^N |
TST | and | Rn&N |
- 一个乘法指令的周期数量,在一些实现中取决于Rs的值
指令 | 解释 | 使用 |
---|
MLA{< cond>}{S} Rd, Rm,Rs,Rn | | |
MUL{< cond>}{S} Rd, Rm,Rs | | |
MLA | | Rd=(Rm*Rs)+Rn |
MUL | | Rd=(Rm*Rs) |
instruction{< cond>}{S} RdLo, RdHi,Rm,Rs | | |
SMLAL | | [High,Low]=[High,Low]+Rm*Rs |
SMULL | | [Hihg.Low]=Rm*Rs |
UMLAL | | 同SMLAL |
UMULL | | 同SMULL |