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.SUBADD
1.LDRSUB
2.ANDLDR
3.ORRAND
4.STOPS
* 指令可以通过加一个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 桶形移位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值