微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM汇编程序设计之:汇编语言文件格式

ARM汇编程序设计之:汇编语言文件格式

时间:08-30 来源:3721RD 点击:

10.3 汇编语言文件格式

10.3.1 ARM汇编语言语句格式

ARM(Thumb)汇编语法语句格式如下所示。

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

① symbol

程序符号。通常为地址标号(label)。在指令和伪指令中通常为标号;在一些伪操作中符号可能是变量或常数。详见ARM伪操作一节。

在书写中,符号必须从一行的行头开始,前面不能包含空格或制表符tab。

② instruction

ARM或Thumb指令。

③ directive

伪操作。详见ARM伪操作一节。

④ pseudo-instruction

ARM伪指令。详见ARM伪指令一节。

⑤ comment

语句注释。注释以分号(;)开头,注释的结尾即为一行的结尾。为了程序清晰易读,注释也可以单独占用一行。汇编器在对程序进行汇编时忽略注释。

在汇编语言程序设计中,每一条指令的助记符可以全部用大写或全部用小写,但不允许在一条指令中大、小写混用。

同时,如果一条语句太长,可将该长语句分为若干行来书写,在行的末尾用"\"表示下一行与本行为同一条语句。

10.3.2 ARM汇编语言中的符号

在汇编语言程序设计中,经常使用各种符号代替地址(addresses)、变量(variables)和常量(constants)等,以增加程序的灵活性和可读性。尽管符号的命名由编程者决定,但并不是任意的,必须遵循以下的约定。

(1)符号区分大小写,同名的大、小写符号会被编译器认为是两个不同的符号。

(2)符号在其作用范围内必须惟一。

(3)自定义的符号名不能与系统的保留字相同。其中保留字包括系统内部变量

(built in variable)和系统预定义(predefined symbol)的符号。

(4)符号名不应与指令或伪指令同名。如果要使用和指令或伪指令同名的符号要用双斜杠"||"将其括起来,如"||ASSERT||"。

注意

虽然符号被双斜杠括起来,但双斜杠并非符号名的一部分。

(5)局部标号以数字开头,其他的符号都不能以数字开头。

1.变量(variable)

程序中的变量是指其值在程序的运行过程中可以改变的量。ARM(Thumb)汇编程序所支持的变量有三种。

· 数字变量(numeric)。

· 逻辑变量(logical)。

· 字符串变量(string)。

数字变量用于在程序的运行中保存数字值,但注意数字值的大小不应超出数字变量所能表示的范围。

逻辑变量用于在程序的运行中保存逻辑值,逻辑值只有两种取值情况:真({TURE})和假({FALSE})。

字符串变量用于在程序的运行中保存一个字符串,注意字符串的长度不应超出字符串变量所能表示的范围。

在ARM(Thumb)汇编语言程序设计中,可使用GBLA、GBLL、GBLS伪指令声明全局变量,使用LCLA、LCLL、LCLS伪指令声明局部变量,可使用SETA、SETL和SETS对其进行初始化。

2.常量(constants)

程序中的常量是指其值在程序的运行过程中不能被改变的量。ARM(Thumb)汇编程序所支持的常量有数字常量、逻辑常量和字符串常量。

数字常量一般为32位的整数,当作为无符号数时,其取值范围为0~232−1,当作为有符号数时,其取值范围为−231~231−1。汇编器认为−n和232−n是相等的。对于关系操作,如比较两个数的大小,汇编器将其操作数看作无符号的数,也就是说"0>−1",对汇编器来说取值为"假({FLASE})"。

逻辑常量只有两种取值情况,真或假。

字符串常量为一个固定的字符串,一般用于程序运行时的信息提示。

3.程序中的变量代换

汇编语言中的变量可以作为作为一整行出现在汇编程序中,也可以作为行的一部分使用。

如果在数字变量前面有一个代换操作符"$",编译器会将该数字变量的值转换为十六进制的字符串,并将该十六进制的字符串代换"$"后的数字变量。

如果在逻辑变量前面有一个代换操作符"$",编译器会将该逻辑变量代换为它的取值(真或假)。

如果在字符串变量前面有一个代换操作符"$",编译器会将该字符串变量的值代换"$"后的字符串变量。

如果程序中需要字符"$",则可以用"$$"来表示。汇编器将不进行变量替换,而是将"$$"作为"$"。

下面的两个例子说明了变量替换的过程。

; 直接的变量替换

GBLS add4ff

;

add4ff SETS "ADD r4,r4,#0xFF" ;给变量add4ff赋值

$add4ff.00 ;引用变量

; codes

ADD r4,r4,#0xFF00

; 有特殊符号的变量替换

GBLS s1

GBLS s2

GBLS fixup

GBLA count

;

count SETA 14

s1 SETS "a$$b$

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top