2-ARM_流水线_汇编

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 桶形移位

你可能感兴趣的:(2-ARM_流水线_汇编)