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.

R1。<br />

LDR R0,[R1,R2,LSL#2]! ;将存储器地址为R1+R2×4的字数据读入寄存器R0,并将<br />

新地址R1+R2×4写入R1。<br />

LDRR0,[R1],R2,LSL#2 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1<br />

+R2×4写入R1。”<br />

http://www.pczpg.com/a/2010/0607/11062.html<br />

“ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str<br />

指令。<br />

比如想把数据从内存中某处读取到寄存器中,只能使用ldr<br />

比如:<br />

ldr r0, 0x12345678<br />

就是把0x12345678这个地址中的值存放到r0中。”<br />

上面那些ldr的作用,以第一个_undefined_instruction为例,就是将地址为<br />

_undefined_instruction中的一个word的值,赋值给pc。<br />

_undefined_instruction: .word undefined_instruction<br />

_software_interrupt: .word software_interrupt<br />

_prefetch_abort: .word prefetch_abort<br />

_data_abort: .word data_abort<br />

_not_used: .word not_used<br />

_irq: .word irq<br />

_fiq: .word fiq<br />

http://blogold.chinaunix.net/u3/115924/showart_2280163.html<br />

―.word .word expr {,expr}… 分配一段字内存单元,并用expr初始化字内存单元<br />

(32bit)‖<br />

http://re-eject.gbadev.org/files/GasARMRef.pdf<br />

Directiv<br />

e<br />

Description<br />

图表 3 .word 的语法<br />

Syntax Example<br />

.word Define word expr<br />

(32bit numbers)<br />

.word expr {, …} .word 144511, 0x11223<br />

所以上面的含义,以_undefined_instruction为例,就是,此处分配了一个word=32bit=4<br />

字节的地址空间,里面存放的值是undefined_instruction。<br />

而此处_undefined_instruction也就是该地址空间的地址了。用C语言来表达就是:<br />

_undefined_instruction = &undefined_instruction<br />

或<br />

*_undefined_instruction = undefined_instruction<br />

在后面的代码,我们可以看到,undefined_instruction也是一个标号,即一个地址值,对<br />

应着就是在发生“未定义指令”的时候,系统所要去执行的代码。

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

Saved successfully!

Ooh no, something went wrong!