原文地址:http://sdnydubing.blog.163.com/blog/static/13747057020112904958830/


_undefined_instruction: .word  undefined_instruction

_undefined_instruction是一个标号,处理到这里时,asm会把undefined_instruction的值按16bit的形式放在此标号处。 
ldr pc, _undefined_instruction 
就是从_undefined_instruction处取值,即undefined_instruction, 并设置到pc中。

.word就是在这个地方放一个值。相当于在这里定义一个数据变量。用.word定义了一个16bit的数据。

并将underfined_instruction的值本身放在这里,因此,pc=undefined_instruction,实现跳转。 
ldr 是把数据从存储器传输到寄存器上,格式如下: 
ldr(条件) 目的寄存器,<存储器地址>

ldr r1, _rWTCON
_rWTCON:
.word 0x15300000 

这两个语句是不是说把地址0x1530 0000 上的内容传递到r1? 而不是把0x1530 0000 放到r1 ? 
不是把地址0x1530 0000 上的内容传递到r1,是把地址_rWTCON上的内容放到r1,而地址_rWTCON上的内容是0x15300000。实际上就是把r1设置为0x15300000
------------------------------------------ 
.word和0x1530 0000有什么关系?.word就是把expression上的值取出来? expression代表地址? 
.word expression就是在当前位置放一个word型的值,这个值就是expression 
举例来说,

_rWTCON:
.word 0x15300000 

就是在当前地址,即_rWTCON处放一个值0x15300000 
翻译成intel的汇编语句就是: 
_rWTCON dw 0x15300000没有.long/.word 
汇编程序就不知道你想在这里放一个多大的数据, 
相当于数据类型。

另外还应注意:在arm7,9中(其他的我不清楚)arm指令集中一个字类型就是32位。


原文地址:http://ackerman.iteye.com/blog/796754

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

1.关于汇编的语法

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

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

2.标签的含义

.globl _start  _start: b   reset  

标签就是在某行程序代码前作一个标记,标签代表的是这行代码的地址

.globl _armboot_start  _armboot_start:  .word _start  

.word expression就是在当前位置放一个word型的值,这个值就是expression ,此处的含义就是建立一个全局标签_armboot_start,在这个位置上放置_start的值(可以这样理解,_armboot_start是一个地址,这个地址中的内容是_start),则下面的语句会把地址_armboot_start处的内容(_start)装载到r2中。

ldr r2, _armboot_start  

这样做的目的是因为LDR指令的格式为:LDR{条件}    Rd, <地址>。

3..word 0x0badc0de

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

4.关于判断是否拷贝到ram

如果是debug下,uboot直接运行在ram中,从而得到的_start值和TEXT_BASE是相等的,不需要拷贝。如果从flash启动,_start为0x0,TEXT_BASE是sdram的地址,二者是不相等的,需要拷贝。(TQ2440的SDRAM为64M,bank6,地址空间为0x30000000-0x34000000,TEXT_BASE设置为0x33D000000,即0x33D00000-0x34000000为uboot使用的空间+bss和其他的空间)。

见映射图

5.汇编中调用c函数

遵循ATPCS(ARM-THUMB procedure call standard)标准。

汇编中.word的具体用途相关推荐

  1. 伪指令相当于c语言的什么,ARM汇编中关于“.word”伪指令的概念(转)

    PS:在u-boot源码时遇到_armboot_start._bss_start等这些变量,不知道指向什么地址,于是查了一下,弄清了ARM汇编中".word"这个伪指令是什么意思了 ...

  2. linux汇编中的注释,Linux 汇编器:对照 GAS 和 NASM

    Linux 汇编器:对比 GAS 和 NASM 转自 http://www.ibm.com/developerworks/cn/linux/l-gas-nasm.html#ibm-pcon 与其他语言 ...

  3. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)

    From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...

  4. GUN ARM汇编中标号的引用在汇编和C语言中区别(monitor_flash_len = _bss_start - _armboot_start;)

    u-boot/cpu/xx/start.S中: _TEXT_BASE:  .word TEXT_BASE /*uboot映像在SDRAM中的重定位地址,我设置为0xa170 0000 */ .glob ...

  5. 计算机组成原理db和dw,汇编中的DW是什么意思那DB 它们什么作用

    汇编中的DW是什么意思那DB 它们什么作用以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 汇编中的DW是什么意思那DB ...

  6. 【汇编】汇编中的函数

    前言:本文章将讲解什么是函数,以及汇编中函数的存在形式,使用到的工具是DTDEBUG. 1.什么是函数?   在汇编中,函数就是一系列指令的合集,为了完成某个会重复使用的特定功能.         下 ...

  7. ARM官方汇编与ARM GNU汇编中的伪操作

    以下内容源于网络资源的学习与整理,如有侵权请告知删除. 参考博客 (1)嵌入式Linux ARM汇编 (2)GNU ARM 汇编基础 - wanli1024 - 博客园 (3)GNU ARM 汇编简介 ...

  8. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)...

    From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...

  9. 汇编中参数的传递和堆栈修正

    在 Win32汇编中,我们经常要和 Api 打交道,另外也会常常使用自己编制的类似于 Api 的带参数的子程序,本文要讲述的是在子程序调用的过程中进行参数传递的概念和分析.一般在程序中,参数的传递是通 ...

最新文章

  1. HDU1083(二分图-匈牙利算法)
  2. SQLite简介与安装
  3. 【php】运算符优先级界定
  4. jQuery插件之Cookie
  5. 平时少用到的sql query
  6. ServiceStack.Redis常用操作 - 事务、并发锁
  7. 02 | 系统可用性:没有故障,系统就一定是稳定的吗?
  8. 【Linux系统编程】互斥锁
  9. 两台ROS相互通信,并测试节点
  10. 1.1 波士顿房价预测
  11. 原创,呵呵(一张图看明白),USB转TTL、USB转串口、USB转232的区别
  12. JME 3 入门教程 3 - Hello Assets
  13. arcgis api 4.13 —— Layer详细介绍
  14. 棋牌游戏网站支付接口那些事儿
  15. 嵌入式商业智能软件Wyn Enterprise正式步入V5.0时代!
  16. SpringMVC框架理解
  17. 送给程序员的话 - 大牛们的经典语录
  18. 单项目多JDBC驱动版本加载
  19. VQA4-2017-Hierarchical Question Image Co-Attention for VQA
  20. 以智慧城市为标杆打造立体防控,咫尺之间华丽转身

热门文章

  1. java.lang.SecurityException: Permission Denial: startForeground from pid=29734, uid=10484 requires
  2. linux中sigaction函数详解
  3. 阿里大牛的Java后端书架来啦,都是Java程序员必看的书籍
  4. bson java_使用Gobson / Mgo解组BSON数据
  5. 实例讲解CASS计算占地面积及土方量
  6. LAYUI 整合富文本编辑器
  7. 关于哈夫曼树与编码,带权路径长度
  8. Jetson Orin平台marvell 88Q2112 RGMII接口网络调试
  9. 数据结构--TopK问题
  10. 光伏频率电压解列装置