ARM-流水线

3 篇文章 0 订阅

ARM-流水线

AMBA(片上高速总线)

ARM内核

跳转指令:
b : goto ±32M add pc , n
bl: 子函数调用 lr = pc_old mov pc,lr

最佳流水线:

-1
f: add
d:*
e:*
0:
f:sub
d:add
e:*
1:
f:orr
d:sub
e:add
2:
f:and
d:orr
e:sub

ldr:
-1:
f:add
d:*
e:*
0:
f:sub
d:add
e:*
1:
f:ldr
d:sub
e:add
2:
f:and
d:ldr
e:sub
3:
f:orr
d:and
e:ldr
4:
f:wait
d:wait
e:m 从内存加载一个值到cpu的一个位置
5:
f:wait
d:wait
e:w 将该值写回到 指定的通用寄存器
6:
f:eor
d:orr
e:and
….

分支流水线:(当程序发送 需要返回的跳转,cpu将会将lr自己调整 -4)

-1:
f:bl
d:*
e:*
0:
f:sub
d:bl
1:
f:orr
d:sub
e:bl pc = 0x8fec

2:
f:and (0x8fec)
d:— 本周期地址 于 上一周期地址不连续,数据被丢弃
e:l lr = 上一个周期的pc值 == 0x8008
3:
f:orr
d:and
e:a lr = lr - 4 = 0x8004
4:
f:eor
d:orr
e:and
…….

//mov pc,lr

IRQ中断流水线:

-1
f:add
d:*
e:*
0:
f:sub
d:add
e:&
1: (IRQ产生)
f:mov
d: IRQ
e:add
2: pc == 0x800c
f:* (800c)
d:wait
e:irq spsr_irq = cpsr cpsr = [irq] ; pc = 0x18
3: pc == 0x18
f:b 0xaf00
d:wait
e:L lr = pc_old = 0x800c
4:pc == 0x1c
f:* (0x1c)
d:b 0xaf00
e:a lr = lr - 4 = 0x8008 返回地址跑偏4字节 ,需要后期手动减4

5: pc == 0x20
f:* (0x20)
d:* (0x1c)
e:b 0xaf00 pc = 0xaf00
6:pc == 0xaf00
f:stmfd
d:–
e:–
7:
f:mov
d:stmfd
e:–
8:
f:ldr
d:mov
e:stmfd

ldmfd
// subs pc,lr,#4

//sub lr,lr,#4
//movs pc,lr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值