- 论坛徽章:
- 0
|
.globl _start /*汇编程序的缺省入口是start标号,定义入口点
_start: *.globl告诉汇编器,start这个符号要被链接器用到,
*所以要在目标文件的符号表中标记它是一个全局符号,
*/链接器在链接时会查找目标文件中的_start符号代表的地址,把它设置为整个程序的入口地址
以上的注释是我对.globl的理解,但在标号的前面加与不加.globl的区别到底是什么呢?
好像有的子程序标号又没有加.globl,如果这个_start前面不加.globl又会出现什么样的错误呢?
这个是我的第一个问题???
在程序开始有#include <common.h>
#include <config.h>
这两个头文件是在u-boot的哪个目录啊,我没找到。还有后面的TEXT_BASE等几个宏是在这两个文件中定义的吗??
这个是我的第二个问题???
start_code:
/*
* set the cpu to SVC32 mode
*/
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0xd3
msr cpsr,r0
这段程序是想把CPSR置成0x000000DB,这样就是SVC mode了,但是在做MRS r0, cpsr时从cpsr中读出的值又是多少呢?
[4,0]这5位是11111,才是正确的,但真的是这个值吗?
这个是我的第3个问题???
ldr pc, _start_armboot
_start_armboot: .word start_armboot
这个是个跳转,但我又不知道 start_armboot的值是多少,所以就不知道程序跳到哪里去了(如问题2)那到底是跳到哪里去了呢?
这个是我的第4个问题??? |
|