伪操作是ARM汇编语言源程序中的特殊指令助记符,其作用是为了完成汇编程序做各种准备工作的,指示汇编程序对汇编语言源程序的编译操作。是编译器执行的指令,而不是ARM处理器执行的指令。
(1)用于定义全局变量的GBLA、GBLL和GBLS。
(2)用于定义局部变量的LCLA、LCLL和LCLS。
(3)用于对变量赋值的SETA、SETL和SETS。
(4)为通用寄存器列表定义名称的RLIST。
全局变量定义伪操作GBLA、GBLL和GBLS
GBLA Test1 ;定义一个全局的数字变量,变量名为Test1
Test1 SETA 0xaa ;将该变量赋值为0xaa
GBLL Test2 ;定义一个全局的逻辑变量,变量名为Test2
Test2 SETL {TRUE} ;将该变量赋值为真
GBLS Test3 ;定义一个全局的字符串变量
Test3 SETS "Testing" ;将该变量赋值为“Testing”
局部变量定义伪操作LCLA、LCLL和LCLS
LCLA Test4 ;声明一个局部的数字变量,变量名为Test4
Test3 SETA 0xaa ;将该变量赋值为0xaa
LCLL Test5 ;声明一个局部的逻辑变量,变量名为Test5
Test4 SETL {TRUE} ;将该变量赋值为真
LCLS Test6 ;定义一个局部的字符串变量
Test6 SETS "Testing" ;将该变量赋值为“Testing”
数据定义伪操作一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。
(1)DCB用于分配一片连续的字节存储单元并用指定的数据初始化
(2)DCW(DCWU)用于分配一片连续的半字存储单元并用指定的数据初始化
(3)DCD(DCDU)用于分配一片连续的字存储单元并用指定的数据初始化
(7)SPACE用于分配一片连续的存储单元
(8)MAP用于定义一个结构化的内存表首地址
(9)FIELD用于定义一个结构化的内存表的数据域
DCB
DCB伪操作用于分配一片连续的字节存储单元并用伪指令中指定的表达式初始化
Str DCB "This is a test!" ;分配一片连续的字节存储单元并初始化为指定字符串。
C_string DCB "C_string",0 ; 与C中的字符串不同,ARM汇编中的字符串不以null结尾,要想字符串以null结尾需要手动在后面添加0
DCW
DCW(或DCWU)伪操作用于分配一片连续的半字存储单元并用伪指令中指定的表达式初始化。其中,表达式可以为程序标号或数字表达式。用DC分配的字存储单元是半字对齐的,而用DCU分配的字存储单元并不严格半字对齐。
DataTest DCW 1,2,3 ;分配一片连续的半字存储单元并初始化
DataDCF-255,2*number DCWU nunber+4 ;在指定内存单元初始值时可以使用已定义的变量
DCD
DCD(或DCDU)伪操作用于分配一片连续的字存储单元并用伪指令中指定的表达式初始化。用DCD分配的字存储单元是字对齐的,而用DCDU分配的字存储单元并不严格字对齐。
DataTest DCD 4,5,6 ;分配一片连续的字存储单元并初始化
Datalest DCD nen06+4 ;用程序标号初始化内存单元
;在内存单元不能字对齐的情况下,使用DCDU伪操作
AREA Mydata,DATA,READURTTE
DCB 255:字节定义使内存单元不能字对齐
Data3 DCDU 1,5,20
SPACE
SPACE伪指令用于分配一片连续的存储区域并初始化为0。
SPACE伪操作常和ALIGN一起使用。
DataSpace SPACE 100 ;分配连续100字节的存储单元并初始化为0,存储单元的地址为DataSpace
;在Mydata段的开始可以是255个初始化为0的字节单元
AREA Mydata,DATA,READIRITE
data1 SPACE 255
IF、ELSE、ENDIF
WHILE、WEND
MACRO、MEND
MEXIT
ALIGN 用于使程序当前位置满足一定的对齐方式。
AREA 用于定义一个代码段或数据段
ENTRY 用于指定程序入囗点
END 用于指示源程序结束
EQU 跟C中的宏定义一致
EXPORT或GLOBAL 用于声明符号可以被其他文件引用,类比C中的extern
IMPORT 用于通知编译器当前符号不在本文件中,类比C中的extern
ADR伪指令为小范围地址读取伪指令。ADR伪指令将基于PC相对偏移地址或基于寄存器相对偏移地址值读取到寄存器中,当地址值是字节对齐时,取值范围为-255-255,当地址值是字对齐时,取值范围为-1020~1020。当地址值是16字节对齐时其取值范围更大
LDR R4,=data+4*n ;n是汇编时产生的变量
;code
MOV pc,1r
data DCD value0
... ;n-1条DCD伪操作
DCD value7 ; 要装入R4的值
... ;更多DCD伪操作
当要装载的常量超出了IOV指令或V指令的范围时,使用LDR指令由LDR指令装载的地址是绝对地址,即PC相关地址。
ldr r3,= 0xff0 ; r3 = 0xff0,相当于mov r3,#0xff0
ldr r2 ,= 0xfff ;r2 = 0xfff ,相当于ldr r1,[PC,offset]
该指令让处理器完成一个空操作,且不会影响cpsr标志位。
可用于延时,相当于mov r0,r0
ldr r3,= 0xff0 ; r3 = 0xff0,相当于mov r3,#0xff0
;延时3个空操作时间
nop
nop
nop
ldr r2 ,= 0xfff ;r2 = 0xfff ,相当于ldr r1,[PC,offset]