arm汇编标号globl和word解释

转载地址:http://blog.sina.com.cn/s/blog_4a3946360102wnaj.html

最简单的bootloader的编写步骤:
1. 初始化硬件:关看门狗、设置时钟、设置SDRAM、初始化NAND FLASH
2. 如果bootloader比较大,要把它重定位到SDRAM
3. 把内核从NAND FLASH读到SDRAM
4. 设置"要传给内核的参数"
5. 跳转执行内核


地址的确定:
mov r0, #0       //传参数
ldr r1, =_start  //这个是链接地址即就是第一个标号
ldr r2, =__bss_start//
sub r2, r2, r1
bl copy_code_to_sdram

下面是从以下博客摘录

http://ackerman.iteye.com/blog/796754

http://sdnydubing.blog.163.com/blog/static/13747057020112904958830/


解释:.globl _start
.globl指示告诉汇编器,_start这个符号要被链接器用到,所以要在目标文件的符号表中标记它是一个全局符号(在第 5.1 节 “目标文件”详细解释)。
_start就像C程序的main函数一样特殊,是整个程序的入口,链接器在链接时会查找目标文件中的_start符号代表的地址,把它设置为整个程序的入口地址,
所以每个汇编程序都要提供一个_start符号并且用.globl声明。如果一个符号没有用.globl声明,就表示这个符号不会被链接器用到。 



arm汇编标号globl和word解释

感觉一定要理解一些基本的概念,然后在看懂汇编的基础上,再分析uboot的流程。

1.关于汇编的语法
这里有两套汇编的语法:分为ARM公司的标准ARM汇编语言和GNU对ARM支持的GNU ARM汇编。ARM标准汇编语言即ARM公司的开发工具ADS里用的汇编语言;GNU汇编即在Linux下用GCC编译的汇编。两者语法有少许差异。因此,通常我们下载的LINUX下的ARM接口代码放到ADS下是不能编译通过的,需要进行少许修改。

GNU AS语法即AT&T汇编语法,uboot用到的语法。

2.标签的含义
 arm汇编标号globl和word解释

的内容(_start)装载到r2中。
As代码  
ldr r2, _armboot_start  
这样做的目的是因为LDR指令的格式为:LDR{条件}    Rd, <地址>。

3..word 0x0badc0de
含义:保留一个字,初始化一下。实际的值应该在运行时计算出来。(badcode吗,呵呵)。

arm汇编标号globl和word解释