3级流水线:取指、译码、执行
- ARM7 ARM v4
- 最佳流水线
ARM9 5级流水线
-1. f(ADD)
0. d(ADD) f(SUB)
1. e(ADD) d(SUB) f(ORR)
F取指 | D译码 | E执行 | |
---|---|---|---|
-1. | ADD | ||
0. | SUB | ADD | |
1. | LDR | SUB | ADD |
2. | AND | LDR | SUB |
3. | ORR | AND | LDR |
4. | STOP | S | M |
* 指令可以通过加一个S来设置cpsr的标志位
* CMP指令不需要加S就可以改变cpsr的标志位
条件码可以加到任意指令上
- EQ 相等
- NE 不相等
- LT 小于
- GT 大于
- LE 小于或等于
- GE 大于或等于
- AL 无条件执行
ADDEQS R0,R1,R2 LSL #2
- R0 = R1+R2*4
- 0001<<2 0100
ADD R0,R1,#0xff
- R0 = R1 + 255
CMP 比较指令,用减法实现 SUB
if(a < 10 || a > 100) a = 250;
cmp r0,#10
movlt r0,#250
blt end
cmp r0,#100
movgt r0,#250
.end
b 一去不回 跳转大小为2的25次方
bl 衣锦还乡,可以调用函数并返回
bx 可以跳转到thumb指令
blx
长跳转 用mov可以实现,写入值到PC
sub r0,r1,r2
r0 = r1 - r2
rsb r0,r1,r2 反向减法
r0 = r2 - r1
rsb r0,r1,#100
r0 = 100 - r1
mov r0,r1
r0 = r1
and 按位与
ORR 按位或
eor 异或
bic 按位清零
- 64位的加法
- r2 r3 r0 = r2 + r4 设置c
- r4 r5 r1 = r3 + r5 + c
- adds r0,r2,r4
- adc r1,r3,r5
r0 = r1 * 5;
add r0,r1,r1,lsl #2
r0 取 负
rsb r0,r0,#0
lsl 无符号左移
lsr 无符号右移
asr 保留符号位 右移
ror 桶形移位