编程语言
首页 > 编程语言> > arm汇编基础(针对i.mx6ull)

arm汇编基础(针对i.mx6ull)

作者:互联网

汇编语法

1

arm中的指令、伪指令、伪操作、寄存器名,可以全大写(全小写)但是不能混写

2.

label:instruction@comment
标号:
指令@注释
add:
MOVS R0,#0X12@设置R0=0X12

3.伪操作段名

.txt 代码段
.data 数据段
.bss 未初始化的数据段
.rodata 只读数据段
例如:
.global _start

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

4.位操作全局变量

.byte 定义单字节数据,比如byte 0x12
.short 定义双字节数据,比如.byte 0x1234。
.long 定义一个 4 字节数据,比如.long 0x12345678。
.equ 赋值语句,格式为:.equ 变量名,表达式,比如.equ num, 0x12,表示 num=0x12。
.align 数据字节对齐,比如:.align 4 表示 4 字节对齐。
.end 表示源文件结束。
.global 定义一个全局符号,格式为:.global symbol,比如:.global _start。

5.GNU汇编函数

函数名:
函数体
返回语句
例如:

/* 未定义中断 */
Undefined_Handler:
 ldr r0, =Undefined_Handler
 bx r0
 
/* SVC 中断 */
SVC_Handler:
 ldr r0, =SVC_Handler
 bx r0
 
/* 预取终止中断 */
PrefAbort_Handler:
 ldr r0, =PrefAbort_Handler 
bx r0

arm7常用汇编指令

1.数据传输

2.存储器访问

CPU不能直接访问存储器,需要通过寄存器做桥梁

@LDR
LDR		R0,=0X0209C004
LDR		R1,[R0]

@STR
LDR		R0,=0X0209C004
LDR		R1,=0X20000002
STR		R1,[R0]

3.栈的出入

函数的调用和切换需要保存现场

STMFD	SP!,{R0~R3,R12}
STMFD	SP!,{LR}

LDMFD	SP!.{LR}
LDMFD	SP!,{R0~R3,R12}

4.跳转

_start:
	ldr	sp,=0x80200000
	b	main
	push	{r0,r1}		@保存r0,r1
	cps		#0x13		@进入**SVC模式**,允许其他中断再次进去

	bl 	system_irqhandler	@加载c语言中断处理函数到r2寄存器中
	
	cps	#0x12	@进入**IRQ模式**
	pop	{r0,r1}	
	str	r0,[r1,#0X10]	@中断执行完成,写EOIR

5.算数运算

6.逻辑运算

本人也是初学者,有一起学习的伙伴可以一起交流啊 !一下是我的联系方式:
QQ
微信

标签:汇编,Rn,R0,寄存器,Rd,immed,Rm,mx6ull,arm
来源: https://blog.csdn.net/weixin_47397155/article/details/120099171