嵌入式单片机原理 第四章.ppt
文本预览下载声明
在ARM/Thumb汇编语言程序中,程序是以程序段(Section)的形式呈现的。程序段是具有特定名称的相对独立指令或数据序列。程序段有两大类型:代码段(Code Section)和数据段(Data Section)。代码段的主要内容为执行代码,而数据段则存放代码运行时需要用到的数据。一个汇编语言程序应当至少应该包含有一个代码段,但当程序较长时,可以将一个长的代码段或者数据段分割为多个代码段或者多个数据段。然后通过程序编译链接(link)最终形成一个可执行的映像文件。 一个可执行映像文件通常由以下几部分构成: 一个或多个代码段,代码段的属性为只读(RO); 零个或多个包含初始化数据的数据段,数据段的属性为可读写(RW); 零个或多个不包含初始化数据的数据段,数据段的属性为可读写(RW)。 一个可执行映像文件通常由以下几部分构成: 一个或多个代码段,代码段的属性为只读(RO); 零个或多个包含初始化数据的数据段,数据段的属性为可读写(RW); 零个或多个不包含初始化数据的数据段,数据段的属性为可读写(RW)。 链接器(linker)根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位置。因此源程序中段之间的相对位置与可执行的映像文件中段的相对位置一般不会相同。 基本结构实例: AREA Init , CODE , READONLY ;定义名为Init只读代码段 ENTRY ;标识程序的入口点 start LDR R0 , =0;加载地址到R0 LDR R1 , 0xff ;加载数据到R1 STR R1 , [R0] ;存储R1中的数据到R0中的地址 LDR R0 , =0;加载地址到R0 LDR R1 , 0x01 ;加载数据到R1 STR R1 , [R0] ;存储R1中的数据到R0中的地址 …… END ;代码段结束标识 虽然汇编指令比较多,但是其指令操作的格式一般式固定的,ARM和Thumb汇编语言的语句格式为: {标号} {指令或伪指令助记符} {;注释} 注意: 指令的助记符写法要么全部大写要么全部小写,不可以在一条指令中既有大写又有小写,不可以大小写混合使用; 如果一条语句太长,可以拆分成若干行来写,但需要在行末尾用续行符“\”来标识下一行与本行同属于一条语句。 汇编程序中除了会用到ARM或者Thumb指令之外,还会需要一些符号、常量、变量和变量代换等。这些类型一般也是有具体要求的: 符号主要用来代替地址、变量或者常量,但是其不应与指令或者伪指令同名,并且它们是区分大小写的,不能与系统的保留字相冲突; 常量包括逻辑常量、字符串常量和数字常量:逻辑常量只取两种值(真或者假);字符串常量保存一固定的字符串,用于程序运行时的信息;数字常量一般为32位的整数,无符号时可表示范围为0~232-2,有符号时可表示范围为-231~231-1; 变量包括逻辑变量、字符串变量和数字变量:其中逻辑变量用于程序运行中保存逻辑值(真或者假);字符串变量保存字符串,但字符串的长度不能超出字符串变量所能表示的范围;数字变量保存数字值,但数字大小不能超出变量的表示范围; 变量可以通过代换取得一个常量,代换的操作符为“$”:如果“$”在逻辑变量前面,编译器会将该逻辑变量代换为它的取值(真或者假);如果“$”在字符串变量前面,编译器会将该字符串变量的值代换“$”后的字符串变量;如果“$”在数字变量前面,编译器会将该数字变量的值转换为十六进制的字符串,并将该十六进制的字符串代换“$”后面的变量。 Linux下GCC的汇编语言程序语言程序是以程序段为单位进行组织的。现在Linux下GCC的汇编语言规则总结如下: 所有的指令均不能顶格写; 大小写区分(要么全部大写,要么全部小写,不可以大小写混用); 代码标号必须在一行的顶格,后面要加上冒号“:”; 注释的内容可以使用符号“@”,其后面的内容编译器会放弃编译。注释可以在一行的顶格。 实例: .EXAMPLE1 @表示是只读代码段 _START: .GOLBAL START @START作为链接器使用 .GOLBAL MAIN @MAIN函数 B MAIN @跳转至MAIN函数 MAIN: MOV R0,#0 @R0=0 LDR R1,#1 @R1=1 ADDOP: ADD R2,R1,R0 @R2=R1+R0
显示全部