博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uboot中start.s源码指令
阅读量:6119 次
发布时间:2019-06-21

本文共 1037 字,大约阅读时间需要 3 分钟。

本文参考文档:

  1. .globl _start
    globl是关键字,相当于c语言中的extern,声明此变量,并且告诉链接器此变量是全局的,外部可以访问。
  2. _start:b reset
    _start后面加上一个冒号’:’,表示其是一个标号Label,类似于C语言goto后面的标号。

_start的值就是这个代码的位置,此处即为代码的最开始,相对的0的位置。

而此处最开始的相对的0位置,在程序开始运行的时候,如果是从NorFlash启动,那么其地址是0,_start=0。
如果是重新relocate代码之后,就是我们定义的值了。
而_start标号后面的:b reset
就是跳转到对应的标号为reset的位置。

  1. ldr指令
    格式:ldr{条件} 目的寄存器,<存储器地址>

用于从存储器中将一个32位的字数据传送到目的寄存器中。

ps:当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。

  1. .word
    分配一个4字节的地址空间。

eg._undefined_instruction: .word undefined_instruction

c语言表示:_undefined_instruction=&undefined_instruction;

  1. .balignl
  2. .balignl 16,0xdeadbeef

接下来的代码,都要16字节对齐,不足之处,用0xdeadbeef填充。

  1. bl
    reset: bl save_boot_params

引起处理器转移到“save_boot_params”处开始执行,并将下一条指令的地址拷贝到R14,可实现子程序的返回。

  1. mrs/msr bic/orr
    7.1格式:

mrs{条件} 通用寄存器,程序状态寄存器(cpsr或spsr)

mrs指令用于将程序状态寄存器的内容传送到通用寄存器中。使用情况1)需要改变程序状态寄存器的内容时 2)异常处理或进程切换时
7.2格式:
msr{条件} 程序状态寄存器(cpsr或spsr)_<域>,操作数
msr指令用于将操作数的内容传送到程序状态寄存器的特定域中。
7.3格式:
bic{条件}{S} 目的寄存器,操作数1,操作数2
bic指令用于清除操作数1的某些位,并把结果放置到目的寄存器中。
7.4格式:
orr{条件}{S} 目的寄存器,操作数1,操作数2
orr指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。

转载地址:http://mrmka.baihongyu.com/

你可能感兴趣的文章
nginx的日志格式
查看>>
2-8. LDAP 网络用户账户
查看>>
Chrome HSTS异常导致无法访问HTTPS网页
查看>>
在apache2.2 php5.3.6 mysql5.5下出现#1366号mysql错误解决办法
查看>>
Provisioning Services 7.6 入门到精通系列之五:PVS控制台安装
查看>>
python学习笔记二 列表、字典、集合
查看>>
TCP/IP链接的三次握手与四次挥手
查看>>
Samba平台搭建和用户自行修改密码环境搭建笔记
查看>>
TCP三次握手和四次挥手全过程及为什么要三次握手解答
查看>>
对象模型向数据库表的映射规则
查看>>
dwz中保存数据后回调如何添加自己的回调方法
查看>>
配置bind缓存服务器
查看>>
怎么能让json_decode解析带斜杠的字符串
查看>>
Oracle 导出 ASH的dump信息
查看>>
php 操作数组 (合并,拆分,追加,查找,删除等)
查看>>
AndroidTouchGalleryLibrary 优化
查看>>
web负载均衡(ipvsadm)(未成)
查看>>
NFS服务器搭建和配置
查看>>
linux备份
查看>>
secureCRT 自动断掉问题解决
查看>>