02.07.2013 Views

Uboot中start.S源码的指令级的详尽解析

Uboot中start.S源码的指令级的详尽解析

Uboot中start.S源码的指令级的详尽解析

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

图表 28 ARM9 的五级流水线示例<br />

然后我们以下面 uboot 中的 start.S 的最开始的汇编代码为例来进行解释:<br />

┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳<br />

00000000 :<br />

0: ea000014 b 58 <br />

4: e59ff014 ldr pc, [pc, #20] ; 20 <br />

8: e59ff014 ldr pc, [pc, #20] ; 24 <br />

c: e59ff014 ldr pc, [pc, #20] ; 28 <br />

10: e59ff014 ldr pc, [pc, #20] ; 2c <br />

14: e59ff014 ldr pc, [pc, #20] ; 30 <br />

18: e59ff014 ldr pc, [pc, #20] ; 34 <br />

1c: e59ff014 ldr pc, [pc, #20] ; 38 <br />

00000020 :<br />

20: 00000120 .word 0x00000120<br />

┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻<br />

下面对每一个指令周期,CPU 做了哪些事情,分别详细进行阐述:<br />

在看下面具体解释之前,有一句话要牢记,那就是:<br />

PC 不是指向你正在运行的指令,而是<br />

PC 始终指向你要取的指令的地址。<br />

认识清楚了这个前提,后面的举例讲解,就容易懂了。<br />

指令周期 Cycle1<br />

(1)取指:<br />

PC 总是指向将要读取的指令的地址(即我们常说的,指向下一条指令的地址),而当前 PC=4,<br />

所以去取物理地址为 4 对对应的指令“ldr pc, [pc, #20]”,其对 应二进制代 码为

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!