Part3_lesson1---ARM汇编编程概述
2016-08-02 21:01
141 查看
bootloader以及内核需要使用汇编语言,特别是在初始化的时候!以及在效率要求很高的地方会使用。
![](https://images2015.cnblogs.com/blog/717936/201608/717936-20160803175058918-273038452.png)
汇编程序框架:
![](https://images2015.cnblogs.com/blog/717936/201608/717936-20160803175843293-1644885776.png)
其入口在_start处,这个入口需要用一个关键字为.global来声明它是一个全局的标号,那么在外部文件才能够引用到它。
.section表示这是一个段,.text表示这是一个代码段。
简化之后的框架
![](https://images2015.cnblogs.com/blog/717936/201608/717936-20160803180236903-470557369.png)
要调试某个文件是把格式为elf的文件烧写到内存里面去调试。
要下载某个文件是要把格式为二进制的文件烧写到nandflash里面去运行。
start.S文件
![](https://images2015.cnblogs.com/blog/717936/201608/717936-20160803182621840-1366378174.png)
makefile文件的编写:
all:start.o
arm-linux-ld -Ttext 0x50000000 -o start.elf $^
%.o :%.S
arm-linux-gcc -g -o $@ $^ -c
clean:
rm *.o *.elf
这里不使用链接器脚本文件,因为我是想把这个程序放到内存里面去运行,希望指定这个程序的链接地址应该是从内存里面的某一个地址开始。那么怎么来指定这一点呢,我们可以使用-T,也就是说这个程序的代码段的起始地址应该是从什么地方开始的。-Ttext,它就指明了程序代码段的起始地址是从什么地方开始的,也就是0x50000000.
也可以在链接器脚本里面来指定!
![](https://images2015.cnblogs.com/blog/717936/201608/717936-20160803181613153-518969698.png)
![](https://images2015.cnblogs.com/blog/717936/201608/717936-20160803175058918-273038452.png)
汇编程序框架:
![](https://images2015.cnblogs.com/blog/717936/201608/717936-20160803175843293-1644885776.png)
其入口在_start处,这个入口需要用一个关键字为.global来声明它是一个全局的标号,那么在外部文件才能够引用到它。
.section表示这是一个段,.text表示这是一个代码段。
简化之后的框架
![](https://images2015.cnblogs.com/blog/717936/201608/717936-20160803180236903-470557369.png)
要调试某个文件是把格式为elf的文件烧写到内存里面去调试。
要下载某个文件是要把格式为二进制的文件烧写到nandflash里面去运行。
start.S文件
![](https://images2015.cnblogs.com/blog/717936/201608/717936-20160803182621840-1366378174.png)
makefile文件的编写:
all:start.o
arm-linux-ld -Ttext 0x50000000 -o start.elf $^
%.o :%.S
arm-linux-gcc -g -o $@ $^ -c
clean:
rm *.o *.elf
这里不使用链接器脚本文件,因为我是想把这个程序放到内存里面去运行,希望指定这个程序的链接地址应该是从内存里面的某一个地址开始。那么怎么来指定这一点呢,我们可以使用-T,也就是说这个程序的代码段的起始地址应该是从什么地方开始的。-Ttext,它就指明了程序代码段的起始地址是从什么地方开始的,也就是0x50000000.
也可以在链接器脚本里面来指定!
![](https://images2015.cnblogs.com/blog/717936/201608/717936-20160803181613153-518969698.png)
![](https://images2015.cnblogs.com/blog/717936/201608/717936-20160803181932028-1541869421.png)
相关文章推荐
- 3.1 ARM汇编编程概述
- [国嵌笔记][024][ARM汇编编程概述]
- ARM中C和汇编混合编程及示例
- 基于ARM的C语言与汇编语言混合编程
- ARM汇编编程基础之二 —— 流水线对PC值的影响
- ARM中C和汇编混合编程中的参数传递
- ARM中C和汇编混合编程中的参数传递
- ARM中C和汇编混合编程
- ARM汇编编程基础之四 —— ARM汇编伪操作
- ARM编程进阶之一 —— ARM汇编伪指令
- ARM中C和汇编混合编程及示例
- ARM汇编编程基础之一 —— 寄存器
- ARM中C和汇编混合编程及示例
- ARM中C和汇编混合编程及示例
- ARM汇编编程基础之一 —— 寄存器
- 【编程】ARM汇编条件码
- ARM中C和汇编混合编程及示例
- ARM中ADS环境下C语言和汇编语言混合编程及示例
- ARM汇编编程基础之四 —— ARM汇编伪操作
- ARM汇编编程基础之三 —— 基本寻址方式与基本指令