首页 > 其他 > 详细

10.ARM汇编的学习

时间:2016-02-14 10:13:19      阅读:193      评论:0      收藏:0      [点我收藏+]

10.ARM汇编的学习

ARM汇编的学习是很必要,学习ARM汇编不是要以后用汇编去写程序,而是要去看得懂,且进行修改就可以了。因为在后面的有关内核和bootloader的工程里,会有部分的代码是汇编程序编写的。在bootloader中,系统一旦上电,第一个运行的程序,需要对cpu、协处理器进行初始化,此时还没有C语言运行的环境,因为没有堆栈等条件。在内核里也是同样的道理。之所以要使用汇编,是因为它公认的高效性,在系统刚上电,或者在一个程序里需要高效的程序语言的时候,就会考虑用汇编来实现。就像C语言,它可以嵌入汇编代码,来提高运行效率。

????总结:两个会使用汇编的地方

  1. 启动代码。
  2. 效率要求高的地方。

ARM汇编分类:

目前常用的ARM汇编指令有两种:

  1. ARM标准汇编:适用于ARM公司的汇编器,适合在Windows平台使用,如ADS平台中使用。
  2. GNU汇编:适用于GNU交叉编译工具链中的汇编器,适合于Linux开发平台。

其实呢ARM标准汇编和GNU汇编,这两种汇编代码的语法都差不多,只是GNU汇编的代码是小写的,ARM标准汇编是大写的。还有一些细微的差别而已。

?

GNU汇编代码基本框架:图1-1:

.section .data

????<初始化的数据>

.section .bss

????<未初始化的数据>

.section .text //.text表明下面是代码段

.globl _start

_start: //ARM汇编的入口,需要用.global声明为全局的,外面的文件才能使用该标示

????<汇编代码>

技术分享

图1-1

如果工程中没有初始化的数据,也没有未初始化的数据,在实际编写的时候,把.text前的.section也省略了。最后的汇编的程序框架如下图:1-2:

.text

.global _start

_start:

????<汇编代码>

技术分享

图1-2

?

建立基本的汇编程序框架:

首先是编写start.S的代码:图1-3:

.text

.global _start

_start:

????mov r1,#11

????mov r2,#22

????mov r3,#33

技术分享

图1-3

上面已经编写好了汇编程序代码start.S,接下来就是编写它的Makefile,只是这一次的Makefile工程里,因为只有一个start.S汇编文件,就不使用lds链接文件了,免得大材小用的工具,直接链接地址。指定直接链接地址的格式:-Ttext 地址。最后的Makefile的代码:Makefile:图1-4:

all: start.o

????arm-linux-ld -Ttext 0x50008000 -o gboot.elf $^

????

%.o : %.S

????arm-linux-gcc -g -o $@ $^ -c

.PHONY: clean

clean:

????rm *.o *.elf

技术分享

图1-4

整个简单的过程就两个文件:图1-5:

技术分享

图1-5

接下来就是按照前面的,来导入eclipse,配置调试环境,启动调试。

这里链接的过程就不详细了。有疑问的可以参考第五节:Eclipse集成开发环境。链接好了之后,成功进行了裸机调试,进入刚才编写的汇编代码:图1-5:

技术分享

图1-5

按一下F6,单步调试,可以看到运行到了第二条汇编代码。图1-6:

技术分享

图1-6

运行了之后,可以看到r1的值被赋值为了11。图1-7:

技术分享

图1-7

接着按F6,执行下一条汇编指令。图1-8:

技术分享

图1-8

可以看到上面,裸机代码正常运行了。

?

?

?

?

?

10.ARM汇编的学习

原文:http://www.cnblogs.com/FORFISH/p/5188698.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!