在 ARM ( Thumb )汇编语言程序中,以程序段为单位安排代码。段是相对独立的指令或数据序列,具有特定的称号。段能够分为代码段和数据段,代码段的内容为履行代码,数据段寄存代码运行时需求用到的数据。一个汇编程序至少应该有一个代码段,当程序较长时,能够分割为多个代码段和数据段,多个段在程序编译链接时终究构成一个可履行的映象文件。
可履行映象文件一般由以下几部分构成:
— 一个或多个代码段,代码段的特点为只读。
— 零个或多个包括初始化数据的数据段,数据段的特点为可读写。
— 零个或多个不包括初始化数据的数据段,数据段的特点为可读写。
链接器依据体系默许或用户设定的规矩,将各个段安排在存储器中的相应方位。因而源程序中段之间的相对方位与可履行的映象文件中段的相对方位一般不会相同。
以下是一个汇编语言源程序的根本结构:
AREA Init , CODE , READONLY
ENTRY
Start
LDR R0 , =0x3FF5000
LDR R1 , 0xFF
STR R1 , [R0]
LDR R0 , =0x3FF5008
LDR R1 , 0x01
STR R1 , [R0]
┉┉
END
在汇编语言程序中,用 AREA 伪指令界说一个段,并阐明所界说段的相关特点,本例界说一个 名为 Init 的代码段,特点为只读。 ENTRY 伪指令标识程序的进口点,接下来为指令序列,程序的结尾为 END 伪指令,该伪指令告知编译器源文件的结束,每一个汇编程序段都必须有一条 END 伪指令,指示代码段的结束。 ARM汇编语言中的子程序调用
在 ARM 汇编语言程序中,子程序的调用一般是经过 BL 指令来完结的。在程序中,运用指令:
BL 子程序名
即可完结子程序的调用。
该指令在履行时完结如下操作:将子程序的回来地址寄存在衔接寄存器 LR 中,一起将程序计器 PC 指向子程序的进口点,当子程序履行结束需求回来调用途时,只需求将寄存在 LR 中的回来地址从头复制给程序计数器 PC 即可。在调用子程序的一起,也能够完结参数的传递和从子程序回运算的成果,一般能够运用寄存器 R0 ~ R3 完结。
以下是运用 BL 指令调用子程序的汇编语言源程序的根本结构:
AREA Init , CODE , READONLY
ENTRY
Start
LDR R0 , =0x3FF5000
LDR R1 , 0xFF
STR R1 , [R0]
LDR R0 , =0x3FF5008
LDR R1 , 0x01
STR R1 , [R0]
BL PRINT_TEXT
┉┉
PRINT_TEXT
┉┉
MOV PC,BL
┉┉
END