购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.2 Keil MDK汇编语言指令格式要点

本节将介绍在KeilμVision中编写汇编语言程序的一些基本知识,帮助读者学习汇编语言助记符指令的书写规则。

4.2.1 汇编语言源代码中的文字

汇编语言源代码可以包含数字、字符串、布尔值和单个字符文字。文字可以表示如下。

(1)十进制数,如123。

(2)十六进制数,如0x7B。

(3)二至九任何进制的数字。比如,5_204表示五进制数204,即

2×5 2 +0×5 1 +4×5 0 =54

等效于十进制数54。很明显,在采用五进制的数值表示中,有效的数字范围为0~4,这个规则适用于采用其他进制的数值表示,即在采用 n 进制的数值表示中,有效的数字范围为0~ n -1。

(4)浮点数,如123.4。

(5)布尔值{TRUE}或{FALSE}。

(6)单引号引起来的单个字符值,如'W'。

(7)双引号引起来的字符串,如"This is a string"。

注: 在大多数情况下,将包含单个字符的字符串看作单个字符值。例如,接受ADD r0,r1,#"a",但不接受ADD r0,r1,#"ab"。

此外,还可以使用变量和名字来表示文字。

4.2.2 汇编语言源代码行的语法

汇编器对汇编语言进行解析并对汇编语言进行汇编以生成目标代码。Keil MDK汇编语言源代码行的格式如图4.4所示。Keil MDK汇编语言源文件中的每行代码都遵循下面的通用格式:

图4.4 Keil MDK汇编语言源代码行的格式

其中:

(1){}表示可选部分,也就是说,每行代码的三个用符号{}括起来的部分都是可选的。

(2)symbol通常是一个标号。在指令和伪指令中,它总是一个标号。在一些命令中,它是变量或常量的符号。

符号必须从第一列开始。除非用竖线(|)括起来,否则它不能包含空格或制表符之类的任何空格字符。

标号是地址的符号表示。可以使用标号来标记要从代码其他部分引用的特定地址。数字局部标签是标签的子类,标签的子类以0~99范围内的数字开头。与其他标号不同,数字局部标号可以多次定义。这使得它们在使用宏生成标号时非常有用。

(3)instruction(指令)|directive(命令)|pseudo-instruction(伪指令)

①命令用于指导汇编器和链接器对汇编语言程序的理解和处理,会影响汇编的过程或影响最终输出的镜像。命令并不能转换为机器指令(机器码)。

②指令是指机器指令(机器码),在汇编语言程序设计中使用汇编语言助记符指令来描述机器指令。本质上,汇编语言程序代码主要是由汇编语言助记符指令构成的。通过使用汇编器和链接器对汇编语言助记符指令进行汇编和连接,转换为可以在Cortex-M0+处理器上执行的机器指令,以实现和完成特定的任务。使用汇编器对图4.4给出的汇编源代码进行汇编后生成的机器指令序列如图4.5所示。

图4.5 使用汇编器对图4.4给出的汇编源代码进行汇编后的生成的机器指令序列

从图4.4和图4.5可知,一条汇编语言助记符指令由操作码和操作数构成。操作码说明指令要执行的操作类型,而操作数说明执行指令时,所需要操作对象的来源。操作数(操作对象)的来源可能是立即数、寄存器或存储器,这与每条指令的寻址方式有关。

(4)comment。注释是源代码行的最后一部分。每行的第一个分号标记注释的开头,除非分号出现在字符串文字内。该行的结尾是注释的结尾。在代码行中,允许仅存在注释。在对汇编源代码进行汇编时,汇编器将忽略所有注释。

注: (1)在KeilμVision软件开发工具中,输入指令助记符、伪指令、命令和符号寄存器名字时,要么全部使用大写字母,要么全部使用小写字母,不允许使用大小写混合的形式。标号和注释可以大写、小写或大小写混合。

(2)为了使汇编源代码更容易阅读,可以通过在每行默认放置反斜杠字符(\),将一行中很长的源代码分成几行。反斜杠后不能跟任何其他字符,包括空格和制表符。汇编器将反斜杠和后面跟随的行结束序列看作空白。此外,还可以使用空行使代码更具有可读性。

4.2.3 汇编语言指令后缀的含义

对于Cortex-M0+的一些汇编助记符指令,需要在其后面添加后缀,后缀及含义如表4.1所示。

表4.1 后缀及含义 7CdirQmEyZs9ggSvAbrh+mXKj6QydW/Ty3RPZ8eaLpu77th7rb2LJLVTlgFyBydL

点击中间区域
呼出菜单
上一章
目录
下一章
×