文档介绍:嵌入式系统技术与设计
第3章 ARM汇编语言程序设计
ARM/Thumb混合编程
ARM汇编器支持的伪操作
ARM汇编器支持的伪指令
汇编语言与C/C++的混合编程
在第2章中阐述的体系结构及指令集理论的基础上,本章主要介绍利用ARM汇编语言进行编程。ARM编译器可以支持汇编语言、C/C++、汇编语言与C/C++的混合编程等,本章将介绍相关的编程方法。
本章主要内容:
● ARM/Thumb混合编程
● ARM汇编器支持的伪操作
● ARM汇编器支持的伪指令
● ARM汇编器的使用
● 汇编语言与C/C++的混合编程
ARM/Thumb混合编程
Thumb指令集把32位ARM指令集的一个子集编码为一个16位的指令集。
代码密度高是Thumb指令集的一个主要优势。
Thumb指令的特点及实现
表3-1 Thumb寄存器的使用
寄存器
访问
R0~R7
完全访问
R8~R12
只能通过MOV、ADD及CMP访问
R13
限制访问
R14
限制访问
R15
限制访问
CPSR
间接访问
SPSR
不能访问
ARM/Thumb交互工作基础
Thumb以其较高的代码密度和在窄存储器上的性能,使得它在很多系统中得到广泛应用。
ARM/Thumb交互子程序
编写ARM/Thumb互交代码时,需要注意下面两点。
(1)对于C/C++子程序而言,只要在编译时指定--apcs/interwork选项,汇编器会生成合适的返回代码,使得程序返回到和调用程序相同的状态。
(2)在汇编语言子程序中,用户必须自己编写相应的返回代码,使得程序返回到和调用程序相同的状态。
对于汇编程序来说,可以有两种方法来实现程序状态的切换。第一种方法是利用连接器提供的交互子程序Veneer来实现程序状态的切换,这时用户可以使用指令BL来调用子程序;第二种方法是用户自己编写状态切换的程序,本节主要介绍第二种方法。
(1)BX指令
ARM状态下的BX指令,使程序跳转到指令中指定的参数Rm所指定的地址执行程序,Rm的第0位复制到CPSR中的T位,bits[31∶1]移入PC。
指令的语法格式如下:
BX{<cond>} <Rm>
(2)编程实例