4第四章 ARM汇编语言程序设计-文档资料
FIELD 用于定义一个结构化的内存表的数据域
1、 DCB(DCB也可用“=”代替)
语法格式:
标号
DCB 表达式
DCB伪指令用于分配一片连续的字节 存储单元并用伪指令中指定的表达式初 始化。其中,表达式可以为0~255的数 字或字符串。
使用示例:
Str DCB "This is a test!"
0xaa
LCLL Test5 ;声明一个局部的逻辑变量,变 量名为Test5
Test4 SETL
真
{TRUE};将该变量赋值为
LCLS Test6 ;定义一个局部的字符串变量, 变量名为Test6
Test6 SETS
为“Testing”
“Testing” ;将该变量赋值
3、 SETA、SETL和SETS
伪指令仅在汇编过程中起作用,一 旦汇编结束,伪指令的使命就完成。
指令 : 由ARM处理器执行
ARM 指令系统
在ARM的汇编程序中,有如下几种伪指令:
符号定义伪指令、 数据定义伪指令、 汇编控制伪指令、 宏指令以及其他伪指令。
ARM 指令系统
4.1.1 符号定义伪指令
符号定义伪指令用于定义ARM汇 编程序中的变量、对变量赋值以及定 义寄存器的别名等操作。
ARM 指令系统
4.1.1 符号定义伪指令
常见的符号定义伪指令有如下几种:
— 用 于 定 义 全 局 变 量 的 GBLA 、 GBLL 和 GBLS。
— 用 于 定 义 局 部 变 量 的 LCLA 、 LCLL 和 LCLS。
— 用于对变量赋值的SETA、SETL、SETS。 — 为通用寄存器列表定义名称的RLIST。
将 寄 存 器 列 表 名 称 定 义 为 RegList , 可在ARM指令LDM/STM中通过该名称 访问寄存器列表。
例:
RegList RLIST {r1-r13};必须顶格开始写
LDMIA r0,RegList
ARM 指令系统
4.1.2 数据定义(Data Definition)伪指令 数据定义伪指令一般用于为特定的数据
IF、ELSE、ENDIF伪指令可以嵌套使用。
使用示例:
GBLL Test ;声明一个全局的逻辑变量,变量名为Test
……
IF Test = TRUE 指令序列1
ELSE 指令序列2 ENDIF
s3c44b0x ARM芯片的初始化源程序:
GBLL THUMBCODE
;global logical variable, init. to {false}
使用示例:
GBLA Counter
;声明一个全局的数学变量,变量名为Counter
Counter SETA
3
;由变量Counter控制循环次数
……
WHILE Counter < 10 指令序列
WEND
3、 MACRO、MEND
语法格式:
MACRO
$标号宏名 $参数1,$参数2,……
指令序列
MEND
第四章 ARM汇编语言程序设计
ADS1.2环境下的汇编语句格式
1. ARM 汇编中,所有标号必须在一行的顶格书写, 其后面不要添加“:”,而所有指令均不能顶格书写。
2. ARM 汇编器对标识符大小写敏感,书写标号及 指令时字母大小写要一致,在ARM 汇编程序中,一个 ARM 指令、伪指令、寄存器名可以全部为大写字母, 也可以全部为小写字母,但不要大小写混合使用(如 果混合使用也能编译通过,如mov SP, r6能编译 通过,但是moV SP, r6则出现错误)。
分配存储单元,同时可完成已分配存储单元
的初始化。常见的数据定义伪指令有如下几 种:
— DCB
用于分配一片连续的字节存储单元并用
指定的数据初始化。
—DCW(DCWU) 用于分配一片连续的半字存储 单元并用指定的数据初始化。
— DCFD(DCFDU)用于为双精度的浮点数分配一片 连续的字存储单元并用指定的数据初始化。
HandleIRQ
#4
HandleFIQ
#4
ARM 指令系统
4.1.3 汇编控制伪指令
汇编控制伪指令用于控制汇编 程序的执行流程
常用的汇编控制伪指令包括 : — IF、ELSE、ENDIF — WHILE、WEND — MACRO、MEND
— MEXIT
1 IF、ELSE、ENDIF (等价于[ | ] )
LCLA伪指令用于定义一个局部的数字变量, 并初始化为0;
LCLL伪指令用于定义一个局部的逻辑变量, 并初始化为F(假);
LCLS伪指令用于定义一个局部的字符串变量, 并初始化为空;
以上三条伪指令用于声明局部变量
使用示例:
LCLA Test4 ;声明一个局部的数字变量, 变量名为Test4
Test3 SETA 0xaa ; 将 该 变 量 赋 值 为
— DCFS(DCFSU) 用 于 为 单 精 度 的 浮 点 数分配一片连续的字存储单元并用指定的数据 初始化。
— DCQ(DCQU) 用于分配一片以8字节 为单位的连续的存储单元并用指定的数据初始 化。
DCD(DCDU)用于分配一片连续的字存储单 元并用指定的数据初始化。
SPACE 用于分配一片连续的存储单元
语法格式:
变量名 SETA(SETL或SETS)表达式
伪 指 令 SETA 、 SETL 、 SETS 给 一 个 已 经 定 义 的全局变量或局部变量赋值。
SETA伪指令用于给一个数学变量赋值; SETL伪指令用于给一个逻辑变量赋值; SETS伪指令用于给一个字符串变量赋值;
其中,变量名为已经定义过的全局变量 或局部变量,表达式为将要赋给变量的值。
AREA RamData, DATA, READWRITE
^ (_IRQ_BASEADDRESS) ; ^ 即 MAP
HandleReset # 4
; # 即 DCD
HandleUndef # 4
HandleSWI
#4
HandlePabort # 4
HandleDabort # 4
HandleReserved # 4
由于以上三条伪指令用于定义全局变量,因此在整个 程序范围内变量名必须唯一。
GBLA Test1
;定义一个全局的数字变量,变量名为Test1
Test1 SETA 0xaa
;将该变量赋值为0xaa
GBLL Test2
;定义一个全局的逻辑变量,变量名为Test2
Test2 SETL {TRUE}
;将该变量赋值为真
4、 MAP,MAP也可用“^”代替。
语法格式:
MAP 表达式{,基址寄存器}
MAP伪指令用于定义一个结构化的内 或数学 表达式,基址寄存器为可选项,当基址 寄存器选项不存在时,表达式的值即为 内存表的首地址,当该选项存在时,内 存表的首地址为表达式的值与基址寄存 器的和。
使用示例:
MAP 0x100 ;定义结构化内存 表首地址的值为0x100。
A FIELD 16
;定义A的长度为16
字节,位置为0x100
B FIELD 32
;定义B的长度为32
字节,位置为0x110
S FIELD 256 ; 定 义 S 的 长 度 为 256字节,位置为0x130
s3c44b0x ARM芯片的初始化源程序:
3. 注释可以在一行的顶格书写。
ARM 指令系统
4.1伪操作
在ARM汇编语言程序里,有一些特殊 指令助记符,这些助记符与指令系统的
助记符不同,没有相对应的操作码,通 常称这些特殊指令助记符为伪指令
他们所完成的操作称为伪操作。
ARM 指令系统
伪指令 : 由汇编器处理
伪指令是由汇编器对源程序汇编期 间进行处理的.
使用示例:
DataTest DCD 4,5,6 ; 分 配 一 片连续的字存储单元并初始化。
3、 SPACE(SPACE也可用“%”代替)
语法格式:
标号
SPACE 表达式
SPACE伪指令用于分配一片连续 的存储区域并初始化为0。其中,表 达式为要分配的字节数。
使用示例:
DataSpace SPACE 100 ; 分 配 连 续 100字节的存储单元并初始化为0。
1、 GBLA、GBLL和GBLS 语法格式:
GBLA(GBLL或GBLS) 全局变量名
GBLA、GBLL和GBLS伪指令用于定义一个ARM程 序中的全局变量,并将其初始化。
GBLA伪指令用于定义一个全局的数字变量,并初始 化为0;
GBLL伪指令用于定义一个全局的逻辑变量,并初始 化为F(假);
GBLS伪指令用于定义一个全局的字符串变量,并初 始化为空;
|
;|=else
THUMBCODE SETL {FALSE}
]
;]=endif
2、 WHILE、WEND
语法格式:
WHILE 逻辑表达式
指令序列
WEND
WHILE、WEND伪指令可以嵌套使用。
WHILE、WEND伪指令能根据条件的成立与 否决定是否循环执行某个指令序列。当WHILE 后面的逻辑表达式为真,则执行指令序列, 该指令序列执行完毕后,再判断逻辑表达式 的值,若为真则继续执行,一直到逻辑表达 式的值为假。
;分配一片连续的字节存储单元并初始化。
2、 DCD(或DCDU,DCD也可用“&”代替)
语法格式:
标号
DCD(或DCDU) 表达式
DCD(或DCDU)伪指令用于分配一片连续 的字存储单元并用伪指令中指定的表达式初 始化。其中,表达式可以为程序标号或数字 表达式。
第4章ARM汇编语言程序设计.
第4章ARM汇编语言程序设计本章介绍如何编写ARM和thumb汇编语言程序。
同时介绍ARM汇编编译器armasm的使用方法。
4.1伪操作ARM 汇编语言源程序中语句由指令、伪操作和宏指令组成。
在ARM中伪操作称为derective,这里为保持和国内在IBM PC汇编语言中对名词翻译的一致性derective称为伪操作;同样在ARM中宏指令被称为pseudo-instructlon,这里将其称为宏指令,宏指令也是通过伪操作定义的。
本节介绍伪操作和宏指令。
伪操作不像机器指令那样在计算机运行期间由机器执行,它是在汇编程序肘源程序汇编期间由汇编程序处理的。
宏是一段独立的程序代码。
在程序中通过宏指令调用该宏。
当程序被汇编时,汇编程序将对每个宏调用作展开,用宏定义体取代源程序中的宏指令。
本节介绍以下类型的ARM伪操作和宏指令。
●符号定义(Symbol definition伪操作。
●数据定义(Data definition)伪操作。
●汇编控制(Assembly control)伪操作。
●框架描述(Frame description)伪操作。
●信息报告(Reporting)伪操作。
●其他(Miscellaneous)伪操作。
4.1.1符号定义伪操作符号定义(Symbol definition)伪操作用于定义ARM汇编程序中的变量,对变量进行赋值以及定义寄存器名称。
包括以下伪操作。
●GBLA、GBLL及GBLS声明全局变量。
●LCLA.LcLL及LCLS 声明局部变量。
●SETA.SETL及SETS 给变量赋值。
●RLIST为通用寄存器列表定义名称。
●CN为协处理器的寄存器定义名称。
●CP为协处理器定义名称。
●DN及SN为VFP的寄存器定义名称。
FN为FPA的浮点寄存器定义名称。
1 GBLA GBLL及GBLSGBLA GBLL及GBLS伪操作用于声叫个ARM程序中的全局变量,并将其初始化。
GBLA伪操作声明一个全局的算术变量,并将其初始化成0。
第4章_基于ARM7系列的汇编语言程序设计
13
4.2.2 常量
常量就是程序中出现的那些固定值, 也就是说其值在程序的运行过程中不 能被改变,除了自身的值以外,没有 其他属性的数值。 ARM7汇编程序所支持的常量可以分 为数值常量、逻辑常量、字符串常量 和和字符常量。
14
4.2.3 变量
变量就是在程序运行过程中可以改变 的量。通过定义变量可以简化程序的 表达,增加程序的可读性,方便对程 序进行修改,便于交流与记忆。 ARM7汇编语言程序所支持的变量有 数值变量、逻辑变量和字符串变量。
Src Dst
DCD DCD
data
AREA |.extra|, NOINIT, READWRITE ; 未初始数据段的名字.extra SPACE 1024 END
声明文件结束
; 文件结束
8
4.1.2 ARM7汇编语言程序框架
段:
ARM汇编程序由段组成(程序段、数据段); 段是由汇编器伪指令AREA定义的相对独立程序 块; 段的属性:READONLY(只读)或READWRITE (读写)分别用于定义一个代码段或数据段;
CODE32 ;声明32位ARM指令 START LDR R0, =src ; R0指向源数据块 LDR R1, =dst ; R1指向目的数据块 标号顶格写 MOV R2, #num ; R2需要拷贝的数据个数 wordcopy LDR R3, [R0], #4 ; 从源数据块中取一个字,放入R3中, 程序代码段 ; R0=R0+4 STR R3, [R1], #4 ; 将R3中的数据存入R1指向的存储 ; 单元中,R1=R1+4 SUBS R2, R2, #1 ; R2计数器减1 BNE wordcopy ; 如果R2不为0,则转向wordcopy处
第四章 ARM汇编程序设计
R0,=0x3FF5000 R1,0xFF R1,[R0] R0,=0x3FF5008 R1,0x01 R1,[R0] PRINT_TEXT
PRINT_TEXT …… MOV PC,LR …… END
第五节 ARM汇编程序示例
start MOV r0, #3 MOV r1, #3 MOV r2, #2 BL arithfunc stop MOV r0, #0x18 LDR r1, =0x20026 SWI 0x123456 arithfunc CMP r0, #num MOVHS pc, lr ADR r3, JumpTable ADR LDR JumpTable DCD DCD DoAdd ADD MOV DoSub SUB MOV r3, JumpTable pc, [r3,r0,LSL#2] DoAdd DoSub
第一节 ARM汇编指示命令
其他常用的汇编指示命令 – 边界对齐:ALIGN – 段定义:AREA – 指令集定义:CODE16和CODE32 – 汇编结束:END – 程序入口:ENTRY – 常量定义:EQU – 声明一个符号可以被其他文件引用:EXPORT和GLORBAL – 声明一个外部符号:IMPORT和EXTERN
第四节 ARM汇编程序结构
顺序 分支 循环
– –
–
–
MOV r0,#10 loop … SUBS r0,r0,#1 BNE loop
子程序
第四节 ARM汇编程序结构
子程序
AREA ENTRY Start LDR LDR STR LDR LDR STR BL …… Init,CODE,READONLY
第一节 ARM汇编指示命令
第4章ARM汇编语言程序设计
例 4.9
LCLA Test3 LCLL Test4
使用示例:
Test3 ;声明一个局部的数值变量,变量名为Test3 SETA 0xaa ;将该变量赋值为0xaa Test4 ;声明一个局部的逻辑变量,变量名为Test4 SETL {TRUE} ;将该变量赋值为真
4.2.2数据定义伪操作
DCB DCW(DCWU) DCD(DCDU) DCDO DCI DCQ(DCQU) DCFS(DCFSU) DCFD(DCFDU) SPACE FIELD MAP LTORG
1.AREA
格 式:AREA 段名 属性1,属性2,……
功 能:AREA伪操作用于定义一个代码段、 数据段或特定属性的段。 其中,段名若以数值开头,则该段名需用 “|”括起来,如|1_test|,用C的编译器产生 的代码一般也用“|”括起来。属性字段表示 该代码段(或数据段)的相关属性,多个 属性用逗号分隔。
4.1汇编语言程序格式
• • • • 4.1.1汇编语言的基本概念 4.1.2汇编语言源程序的组成 4.1.3汇编语言程序中常用的符号 4.1.4汇编语言程序中的表达式和运算符
4.1.1汇编语言的基本概念
4.1.2汇编语言源程序的组成
1.汇编语言源程序的结构
AREA Init,CODE,READONLY ENTRY Start LDR R0,=0x3FF5000 LDR R1,#0xFF STR R1,[R0] LDR R0,=0x3FF5008 LDR R1,#0x01 STRR1,[R0] … END
4.1.3汇编语言程序中常用的符号
在汇编语言程序设计中,经常使用各种符号表 示变量、常量和地址 符号由大小写字母、数字以及下划线组成。 符号区分大小写,同名的大、小写符号会被 编译器认为是两个不同的符号。 符号在其作用范围内必须唯一,即在其作用 范围内不可有同名的符号。 自定义的符号名不能与系统的保留字相同。 符号名不应与指令或伪指令同名。
第4章 ARM汇编程序设计
四、数据帧描述伪操作
数据帧描述伪操作用于汇编程序调试,帮助程序 员在构建汇编程序函数时避免错误。
FRAME ADDRESS FRAME POP FRAME PUSH FRAME REGISTER FRAME RESTORE FRAME SAVE FRAME STATE REMEMBER FRAME STATE RESTORE FUNCTION或 PROC ENDFUNC 或 ENDP
二、数据定义伪操作
DCFD 分配一段双字的内存单元,并用双精度的浮点数 据初始化
语法格式: {标号} DCFD(或DCFDU) 表达式 每个双精度的浮点数占据两个字单元。 DCFD:字对齐 DCFDU:不严格字对齐 DCFD DCFDU 1E308,-4E-100 100000,-.1,3.1E26
三、汇编控制伪操作
(2) WHILE、WEND
语法格式: WHILE 逻辑表达式 指令序列 WEND 实例:
GBLA cnt cnt SETA 1 WHILE cnt <=4 cnt SETA cnt+1 … WEND
;定义变量 ;变量赋值
;代码执行4次
三、汇编控制伪操作
(3) MACRO、 MEND、 MEXIT
ARM 嵌入式系统
第4章 ARM汇编程序设计
ARM汇编语言程序设计
使用局部标号的例子:
例1 无作用范围字符 01 SUBS r0,r0,#1
BNE %B 01
;每次循环使r0=r0-1 ;跳转到01标号去执行
例2 作用范围字符为NAME
ROUT NAME
; NAME作用范围
01NAME SUBS r0,r0,#1
;每次循环使r0=r0-1
BNE %B 01NAME ;跳转到01NAME标号去执行
Labeladd add r0,r0,r1
;
Str1
SETS
“This is a string.”
BKPT ;断点
标签: welcomefun , strarm , Labeladd, Str1
指令/伪操作/伪指令: STMFD , DCB , add , SETS
操作数:其他部分
9
注意: ARM程序中,指令、伪指令、伪操作、寄存 器助记符可以全部为大写或小写,但大小写不能混合 使用。
; “Welcom to ARM world!”字符串
LDMFD
sp!,{pc}
;恢复寄存器值
7
Adrstrarm ;adrstrarm标签
DCD strarm ;保存strarm的地址
AREA constdatasec, DATA, READONLY,ALIGN=0
;数据段,名称为constdatasec, 属性为只读
ENDP ;函数main结束
EXPORT main
;导出main函数供外部调用
;引入三个C运行时库函数和ARM库
IMPORT _main
IMPORT __main
IMPORT _printf
IMPORT ||Lib$$Request$$armlib||, WEAK
ARM嵌入式系统 第4-1章 ARM汇编语言程序设计
15
符号定义伪指令Ⅳ
3. SETA、SETL、SETS 、 、
格式: 格式:变量名 SETA/SETL/SETS 表达式
说明: 说明:
SETA:给一个数字变量赋值; :给一个数字变量赋值; SETL:给一个逻辑变量赋值; :给一个逻辑变量赋值; SETS:给一个字符串变Ⅳ量赋值; :给一个字符串变Ⅳ量赋值;
在宏内定义局部变量后, 在宏内定义局部变量后,则在宏外使用该指令时编 13 译会出错。 译会出错。
符号定义伪指令Ⅲ
2. GBLA、GBLL、GBLS 、 、
格式: 格式:GBLA/GBLL/GBLS 变量名
伪操作定义一个汇编程序中的全局变量,并初始化, 伪操作定义一个汇编程序中的全局变量,并初始化, 其中: 其中:
Array1 DCB 1,2,3,4,5 ;数组 str1 DCB “Your are welcome!” ;构造 ! 字符串并分配空间。 字符串并分配空间。
22
2. DCW/DCWU:
标号/变量 标号 变量 DCW/DCWU 表达式
DCW分配一段半字存储单元并用表达式值初 分配一段半字存储单元并用表达式值初 始化,它定义的存储空间是半字对齐的。 始化,它定义的存储空间是半字对齐的。 DCWU功能跟 功能跟DCW类似,只是分配的字存储 类似, 功能跟 类似 单元不严格半字对齐。 单元不严格半字对齐。 例如: 例如:
所有的标签必须在一行的开头顶格写, 所有的标签必须在一行的开头顶格写,前面不能留 空格,后面也不能跟C语言中的标签一样加上 ” 语言中的标签一样加上“ 空格,后面也不能跟 语言中的标签一样加上“:”; ARM汇编器对标识符的大小写敏感 书写标号及指 汇编器对标识符的大小写敏感,书写标号及指 汇编器对标识符的大小写敏感 令时字母的大小写要一致; 令时字母的大小写要一致; 注释使用“ ”符号,注释的内容从“ ” 注释使用“;”符号,注释的内容从“;”开始到该 行的结尾结束。 行的结尾结束。 例:
第4章ARM程序设计
第4章ARM程序设计
4
4.1 ARM工程(续)
汇编语言 源文件
C/C++语言 源文件
头文件
汇编器
编译器
目标文件 目标文件
C/C++库文件
连接器
可执行文件
第4章ARM程序设计
5
4.1 ARM工程(续)
ARM提供的开发工具Code Warrior for ARM中包含的编译器如下:
编译器 语言种类 源文件类型 源文件扩展名 目标文件类型
3
4.1 ARM工程(续)
用汇编语言或C/C++语言编写的程序 叫做源程序,对应的文件叫做源文件。
一个ARM工程应由多个文件组成,其 中包括扩展名为.S的汇编语言源文件、扩 展名为.C的C语言源文件,扩展名为.CPP 的C++源文件、扩展名为.H的头文件等。
ARM工程的各种源文件之间的关系, 以及最后形成可执行文件的过程如下:
代码段,当程序较长时,可以分割为
多个 代码段和数据段。
第4章ARM程序设计
12
4.2.1 段(续)
以下是一个汇编语注言意程:序教段材的上基的本结构:
程序有误
AREA Init, CODE, READONLY ;只读的代码段
Init
ENTRY
;程序入口点
start LDR R0,=0X3FF5000
2
4.1 ARM工程
由于 C 语言便于理解,有大量的 支持库,所以它是当前 ARM 程序设计 所使用的 主要编程语言。
对硬件底系统层的操初始作化、CPU 状态
设定、中断使能、主频设定以及 RAM 控制参数初始化等 C 程序力所不能及 的 底层操作,还是要由 汇编语言程 序来完成。
第4章 ARM汇编程序设计1
SUBT
ARM汇编程序设计
[ 或IF 这三个符号连用,进行条件汇编 | 或ELSE
汇编控制指示 符
] 或ENDIF
MACRO
MEND MEXIT WHILE
这二个符号连用,定义一个宏定义
用来在结束前退出宏定义 这二个符号连用,进行重复汇编
WEND
ARM汇编程序设计
ALIGN AREA CODE16 CODE32 END ENTRY * 或EQU EXPORT或 GLOBAL IMPORT或 EXTERN GET或 INCLUDE INCBIN KEEP NOFP REQUIRE REQUIRE8 PRESERVE8 RN ROUT 从一个字边界开始 指示汇编器汇编一段新的代码或数据部分 指示汇编器将随后的指令作为16位Thumb指令 指示汇编器将随后的指令作为32位ARM指令 表示源程序的结束 指向程序的入口,一个源文件中只能有一个 ENTRY 对一个常量赋予一个符号名
DCW(或DCWU)
语法格式: {标号} DCW(或DCWU) 表达式
DCW:半字对齐 DCWU:不严格半字对齐。 表达式取值范围:-32768~65535 data1 DCW -128,num1+8 ;num1必须是已经定义过的
DCD(或DCDU)
语法格式:
{标号}
DCD(或DCDU)
表达式
DCD:“ & ” DCD:字对齐 DCDU:不严格字对齐。 data1 data2 DCD DCD 1,5,20 memaddr+4 ;其值为1,5,20
;使用该串变量 ;宏定义结束
局部:作用范围为包含该局部变量的宏代码的一个实例
SETA、SETL、SETS
SETA、SETL和SETS 语法格式: 变量名 SETA(SETL或SETS) 表达式
4第四章 ARM汇编语言程序设计
ARM 指令系统 使用示例:
LCLA Test3
;声明一个局部的
数字变量,变量名为Test3
Test3 SETA 0xaa;将该变量赋值为
0xaa
LCLL Test4
;声明一个局部的
逻辑变量,变量名为Test4
Test4 SETL {TRUE} ; 将 该 变
量赋值为真
4、 RLIST
名称 RLIST {寄存器列表}
使用示例:
GBLA Counter
;声明一个全局的数学变量,变量名为Counter
Counter SETA
3
;由变量Counter控制循环次数
……
WHILE Counter < 10 指令序列
WEND
3、 MACRO、MEND
语法格式:
MAபைடு நூலகம்RO
$标号宏名 $参数1,$参数2,……
指令序列
MEND
[ {CONFIG} = 16
;[=if,{CONFIG}:build-in variable defined by ARM
;assembler,16=assembing Thumbcode.
THUMBCODE SETL {TRUE} ;SETL:set the logic variable
CODE32 ;changing from Thumb state to Arm state
GBLS Test3
;定义一个全局的字符串变量,变量名为Test3
Test3 SETS "Testing"
;将该变量赋值为"Testing"
ARM 指令系统
2、 LCLA、LCLL和LCLS
