嵌入式Linux学习历程 — ARM汇编基础

ARM汇编基础

Cortex-A芯片上电后SP指针还没初始化,C环境还没准备好,不能运行C代码。
必须先用汇编语言设置好C环境,如初始化DDR、设置SP指针等。

GNU汇编语法

我们要编写的是ARM汇编,编译使用的是GCC交叉编译器,所以我们的汇编代码要符合GNU语法。

GNU汇编由一系列的语句组成,每行一条语句,每条语句有三个可选部分:

	lab:instruction @ comment

GNU语法介绍
比如以下代码:

	add:
			MOVS R0,#0X12 @设置R0 = 0X12
	其中:
	"add:"    就是标号
    “MOVS R0,#0X12”    就是指令
	“@设置R0 = 0X12”    就是注释

用户可以通过.section伪操作来定义一个段,汇编系统预定义了一些段名:

  • .text 表示代码段

  • .data 初始化的数据段

  • .bss 未初始化的数据段

  • .rodata 只读数据段
    可以自己使用.section来定义一个段,每个段以段名开始,以下一段名或者文件结尾,如:

     .section .testsection @定义一个testsection段
    

汇编程序默认入口标号是 _start(也可以在连接脚本中使用ENTRY来指明其它的入口点)

.global  _start

_start:
		ldr	r0 ,= 0x12		@r0 = 0X12

.global是伪操作,表示_start是一个全局标号伪操作
GNU汇编支持函数,格式如下:

	函数名:
				函数体
				返回语句

CNU汇编函数返回语句不是必须的,如下代码就是用汇编写的Cortex-A7中断服务函数:
函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值