ARM汇编的基础语法

前言

感觉自己好菜,天天混日子,要抓紧时间学习了!

参考文章:

https://blog.csdn.net/qq_48922607/article/details/129767546

基本介绍

基础语法

      在ARM汇编中,所有标号都必须在一行的顶格书写,后面不能添加”:”,而且所有指令均不能顶格书写。ARM汇编器对标识符大小写敏感,书写标号以及指令时需要字母大小写一致,在ARM汇编程序中,一个ARM指令、伪指令、寄存器名可以全部为大写字母,也可以全部为小写字母,但不要大小写混合使用。注释使用”;”,注释内容由”;”开始到此行结束,注释可以在一行的顶格写。

格式:【标号】 <指令|条件|S> <操作数> [;注释]

     源程序中允许有空行,适当地插入空行可以提高源代码的可读性。如果单行太长,可以使用字符“\” 将其分行 ,”\”后不能有任何字符,包括空格和制表符。对于变量的设置,常量的定义,其标识符必须在一行的顶格书写。

标号

       在ARM汇编中,标号代表一个地址,段内标号的地址在汇编时确定,而段外标号的地址值在连接时确定。

符号

在ARM汇编中,符号可以代表地址、变量、数字常量。当符号代表地址时又称为标号,符号就是变量的变量名、数字常量的名称、标号,符号的命名规则如下:

  1. 1、符号由大小写字母、数字以及下划线组成;
  2. 2、除局部标号以数字开头外,其它的符号不能以数字开头:
  3. 3、符号区分大小写,且所有字符都是有意义的:
  4. 4、符号在其作用域范围你必须是唯一的;
  5. 5、符号不能与系统内部或系统预定义的符号同名;
  6. 6、符号不要与指令助记符、伪指令同名。

段定义

ARM汇编程序设计采用分段式设计,一个ARM源程序至少需要一个代码段,大的程序可以包含多个代码段及数据段.

ARM 汇编程序经过汇编处理后生成一个可执行的映象文件,该文件通常包含下面3部分内容:

一个或多代码段,代码段通常是只读的,

零个或多个包含初始化值的数据段.这些数据段通常是可读写的,零个或多个不包含初始值的数据段,这些数据被初始化为0,通常中可读写的连接器根据一定的规则将各个段安排到内存中的相应位置,源程序中段之间的相邻关系与执行的映象文件中段之间的相邻关系并不一定相同.

                           AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp

汇编点灯代码示例

SCU_BASE_ADDRESS     EQU 	0x40010800  ;//系统寄存器
SCU_IPCKENR2_OFFSET	 EQU	0x20			;//模块时钟使能
SCU_PASTR_OFFSET	 EQU	0x78			;//模块时钟使能
SCU_PA_BADS_OFFSET	 EQU	0x88			;//模数选择寄存器

GPIO_BASE_ADDRESS  	 EQU	0x4001F000  ;GPIOAB外设基地址
GPIO_DIR_OFFSET 	 EQU	0x00		;方向寄存器设置
GPIO_SET_OFFSET 	 EQU	0x08		;电平置为设置
GPIO_CLR_OFFSET 	 EQU	0x0C		;电平清零设置

	
		AREA    ARMex, CODE, READONLy  
		ENTRY
		EXPORT main
		
main  	PROC
		LDR R0,=(SCU_BASE_ADDRESS + SCU_IPCKENR2_OFFSET)
		LDR R1, [R0]
;		ORRS R1, R1, #(1<<1)
		MOVS R1,#0x00000071
		STR R1, [R0]
;		MOVS R1,#0x00000022
		
		
		
		LDR R0,=(SCU_BASE_ADDRESS + SCU_PA_BADS_OFFSET)
		LDR R1, [R0]
		LDR R1,=0xFFFF9EFD
		STR R1, [R0]
		
		
		LDR R0,=(GPIO_BASE_ADDRESS + GPIO_DIR_OFFSET)
		LDR R1, [R0]
		MOVS R1,#0x00000002
		STR R1, [R0]
		
Loop				
		
		; 3、设置GPIOB5的输出寄存器
		LDR R2, =(GPIO_BASE_ADDRESS + GPIO_SET_OFFSET)
		LDR R1, [R2]
		MOVS R1,#0x00000002
		STR R1, [R2]
		
		LDR R0, =100000
		BL delay
		
		; 6、设置GPIOB5输出低
		LDR R2, =(GPIO_BASE_ADDRESS + GPIO_CLR_OFFSET)
		LDR R1, [R2]
		MOVS R1,#0x00000002
		STR R1, [R2]
		
		LDR R0, =100000
		BL delay
		
		B Loop
		ENDP								;过程的结束

		

delay	PROC
		SUBS R0, R0, #1
		BNE delay
		BX LR

		ALIGN 								;填充字节使地址对齐
		END									;整个汇编文件结束



相关推荐

  1. ARM汇编基础语法

    2024-07-10 01:26:03       24 阅读
  2. ARM 汇编 C语言 for循环

    2024-07-10 01:26:03       23 阅读
  3. ARM一些基础知识

    2024-07-10 01:26:03       57 阅读
  4. ARM 汇编入门

    2024-07-10 01:26:03       47 阅读
  5. arm 汇编调用C

    2024-07-10 01:26:03       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 01:26:03       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 01:26:03       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 01:26:03       57 阅读
  4. Python语言-面向对象

    2024-07-10 01:26:03       68 阅读

热门阅读

  1. postman

    postman

    2024-07-10 01:26:03      20 阅读
  2. Redis

    Redis

    2024-07-10 01:26:03      20 阅读
  3. [Linux安全运维] Linux命令相关

    2024-07-10 01:26:03       26 阅读
  4. PCL 点云最小外接球形包围盒

    2024-07-10 01:26:03       20 阅读
  5. Pytest单元测试系列[v1.0.0][高级技巧]

    2024-07-10 01:26:03       19 阅读
  6. CLIP-EBC:通过增强的逐块分类,CLIP能够准确计数

    2024-07-10 01:26:03       24 阅读
  7. #pragma 指令

    2024-07-10 01:26:03       24 阅读
  8. C++休眠的方法

    2024-07-10 01:26:03       24 阅读
  9. Spring容器加载Bean和JVM加载类

    2024-07-10 01:26:03       21 阅读
  10. word 使用手册

    2024-07-10 01:26:03       30 阅读
  11. winform4

    winform4

    2024-07-10 01:26:03      25 阅读