单片机
返回首页

ARM体系结构与编程-2

2020-04-03 来源:eefocus

ARM汇编语言程序设计:ARM汇编语言源程序中的语句由指令、伪操作和宏指令组成。ARM指令已经在上一节介绍过了。


ARM伪操作和宏指令分类:

<1>符号定义伪操作

GBLA:声明一个全局的算术变量,并将其初始化为0。 语法:GBLA variable

GBLL:声明一个全局的逻辑变量,并将其初始化为FALSE 语法:GBLL variable

GBLS:声明一个全局的串变量,并将其初始化为空串“” 语法:GBLS variable

LCLA:声明一个局部的算术变量,并将其初始化为0 语法:LCLA variable

LCLL:声明一个局部的逻辑变量,并将其初始化为FALSE 语法:LCLL variable

LCLS:声明一个局部的串变量,并将其初始化为空串“” 语法:LCLS variable

SETA:给一个算术变量赋值 语法:SETA variable expr

SETL:给一个逻辑变量赋值 语法:SETL variable expr

SETS:给一个串变量赋值 语法:SETS variable expr

RLIST:为一个通用寄存器列表定义名称 语法:name RLIST {list-of-registers}

CN:为一个协处理器的寄存器定义名称 语法:name CN expr

CP:为一个协处理器定义名称 语法:name CP expr


<2>数据定义伪操作

LTORG:用于声明一个数据缓冲池的开始 语法:LTORG

MAP:用于定义一个结构化的内存表的首地址 语法:MAP expr{, base-register}

FIELD:用于定义一个结构化的内存表中的数据域,#是FIELD的同义词 语法:{label} FIELD expr

SPACE:用于分配一块内存单元,并用0初始化,%是SPACE的同义词 语法:{label} SPACE expr

DCB:用于分配一段字节内存单元,并用expr初始化,=是DCB的同义词 语法:{label} DCB expr

DCD:用于分配一段字内存单元,并用expr初始化,&是DCD的同义词 语法:{label} DCD expr


<3>汇编控制伪操作

IF,ELSE及ENDIF:[是IF伪操作的同义词,|是ELSE伪操作的同义词,]是ENDIF伪操作的同义词。


WHILE及WEND:

MACRO及MEND:语法:

MACRO 

{$label} macroname {$parameter1{,parameter2}...}

;code

...

;code

MEND

MEXIT:用于从宏中跳转出去


<4>框架描述伪操作

CODE16:告诉汇编器后面的指令序列为16位的Thumb指令 语法:CODE16

CODE32:告诉汇编器后面的指令序列为32位的ARM指令 语法:CODE32

EQU:为数字常量和程序中的标号定义一个字符名称,*是EQU的同义词。 语法:name EQU expr{, type}

AREA:用于定义一个代码段或者数据段。一个大的程序可以包含多个代码段和数据段。一个汇编程序至少包含一个段。 语法:AREA sectionname{,attr1}{,attr2}...

ENTRY:指定程序的入口点。一个程序中至少要有一个ENTRY,一个源文件中最多只能有一个ENTRY 语法:ENTRY

END:告诉汇编器已经到了源程序的结尾。每个汇编程序都包含END,以告知本源程序的结束。


ALIGN:通过添加补丁字节,使得当前位置满足一定的对齐方式。 语法:ALIGN {expr,{, offset}}

EXPORT:声明一个符号可以被其他文件引用,相当于声明了一个全局变量。 语法:EXPORT symbol{[WEAK]}

IMPORT:告诉汇编器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可以引用该符号。不论本源文件是否引用,该符号都将被加入到本源文件的符号表中。 语法:IMPORT symbol{[WEAK]}

EXTERN:告诉汇编器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可以引用该符号。如果本源文件实际上没有引用该符号,它将不会被加入到本源文件的符号表中。 语法:EXTERN symbol{[WEAK]}

GET及INCLUDE;将一个源文件包含到当前源文件中,并将被包含的文件在当前位置进行汇编处理。 语法:GET filename


<5>信息报告伪操作

ASSERT:用于保证源程序被汇编时满足相关条件,如果条件不满足,ASSERT伪操作报告错误类型并终止汇编。 语法:ASSERT logical-expression


<6>杂项伪操作

ARM汇编语言伪指令:这些伪指令不是真正的ARM或Thumb指令,这些伪指令在汇编时被替换成对应的ARM或Thumb指令。


ADR伪指令:小范围的地址读取指令,该指令将基于PC的地址或者基于寄存器的地址读取到寄存器中。该指令在汇编时被替换成一条指令。


语法:ADR{cond} register, expr

ADRL伪指令:中等范围的地址读取指令,该指令将基于PC的地址或者基于寄存器的地址读取到寄存器中。该指令在汇编时被替换成两条指令。


语法:ADRL{cond} register, expr

LDR伪指令:大范围的地址读取指令,该指令将一个32位常数或地址值读取到寄存器中。

语法:LDR{cond} register, =expr

NOP:空操作指令


ARM汇编语言语句格式:如下:

{symbol} {instruction|directive|pseudo-instruction} {;commnet}

symbol:符号

instrution:指令,在ARM汇编语言中,指令不能从一行的行头开始,在一行语句中,指令的前面必须有空格或者符号

directive:伪操作

pseudo-instruction:伪指令

comment:语句注释。在ARM汇编语言中,注释以;开头。


ARM汇编语言程序格式:ARM汇编语言以段(section)为单位组织源文件,段又分为代码段、数据段。一个ARM源程序至少需要一个代码段,大的程序可以包含多个代码段和数据段。

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • 如何构建一个触摸传感器电路

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章