嵌入式开发必会之汇编指令

文章目录

      • 一.伪指令
        • 1.AREA
        • 2.EQU
        • 3.SPACE
        • 4.PRESERVE8
        • 5.DCD
        • 6.BLX
        • 7.BX

一.伪指令

伪指令(Pseudo Instruction)是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有机器代码,只用于汇编过程中为汇编程序提供汇编信息。例如,提供如下信息:哪些是指令、哪些是数据及数据的字长、程序的起始地址和结束地址等。伪指令有2个特点:

(1)由于是伪**“指令”**,因而它只存在于汇编语言中。高级语言中不叫指令,叫语句;

(2)由于是**“伪”**指令,也即“假”指令,因而不是可执行指令,不会产生机器代码,不会占用ROM空间,只用于汇编过程中为汇编程序提供汇编信息。

1.AREA
AREA    STACK, NOINIT, READWRITE, ALIGN=3
@开辟一段数据空间可读可写,段名 STACK,按照 8 字节对齐。 
2.EQU

EQU 是表示宏定义的伪指令,类似于 C 语言中的#define。伪指令的意思是指这个“指令”并
不会生成二进制程序代码,也不会引起变量空间分配。

Stack_Size EQU 0x00000400   @宏定义
3.SPACE

SPACE 伪指令用于分配一片连续的存储区域并初始化为 0 。其中,表达式为要分配的字节数。
SPACE 也可用 “ % ” 代替。

语法格式: 标号 SPACE 表达式

 DataSpace SPACE 100  @分配连续 100 字节的存储单元并初始化为 0 
4.PRESERVE8

指定当前文件保持堆栈八字节对齐。

5.DCD

DCD (或 DCDU )伪指令用于分配四个字节(一个字)的内存块并用伪指令中指定的表达式初始化。其中, 表达式可以为程序标号或数字表达式。 DCD 也可用 “ & ” 代替。

语法格式: 标号 DCD (或 DCDU ) 表达式
用 DCD 分配的字存储单元是字对齐的,而用 DCDU 分配的字存储单元并不严格字对齐。

DCD Reset_Handler;@分配一个字存储单元并初始化按Reset_Handler初始化。
6.BLX

BLX 指令从ARM 指令集跳转到指令中所指定的目标地址,并将处理器的工作状态有ARM 状态切换到 Thumb 状态,该指令同时将PC 的当前内容保存到寄存器R14 中。因此,当子程序使用Thumb 指令集,而调用者使用ARM 指令集时,可以通过BLX 指令实现子程序的调用和处理器工作状态的切换。同时,子程序的返回可以通过将寄存器R14 值复制到PC 中来完成。

BLX 指令的格式为:BLX 目标地址

7.BX

BX 指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARM 指令,也可以是Thumb指令。

BX 指令的格式为:BX{条件} 目标地址

所指定的目标地址,目标地址处的指令既可以是ARM 指令,也可以是Thumb指令。

BX 指令的格式为:BX{条件} 目标地址

你可能感兴趣的:(嵌入式开发基础)