ARM架构中的程序执行与调用(2)

ARMv7架构中包含了16个32位寄存器,可以用R0-R15表示。下表中描述了每个寄存器的特定应用。

寄存器特殊名称用途
R15   PC   程序计数器 Program Counter  
R14   LR   链接寄存器 Link Register  
R13   SP   栈指针 Stack Pointer  
R12   IP   The Intra-Procedure-call scratch register  
R11       变量寄存器8 Variable-register 8  
R10       变量寄存器7 Variable-register 7  
R9   v6 SB TR   平台寄存器,其功能是由平台定义的  
R8       变量寄存器5 Variable-register 5  
R7       变量寄存器4 Variable-register 4  
R6       变量寄存器3 Variable-register 3  
R5       变量寄存器2 Variable-register 2  
R4       变量寄存器1 Variable-register 1  
R3       参数寄存器4 Argument, scratch register 4  
R2       参数寄存器3 Argument , scratch register 3  
R1       参数、结果寄存器2 Argument, result, scratch register 2  
R0       参数、结果寄存器1 Argument, result, scratch register 1  

r0-r3四个寄存器用来向被调用程序传递参数,以及从一个函数返回结果。ARMv7中用寄存器传递参数最多可以有四个,更多的参数传递,则需要用到栈来实现。这几个寄存器也可以当做普通寄存器来存储临时值。

寄存器r12(IP)被链接器使用,在调用程序和子程序之间作为一个scratch register 。

r9寄存器功能是对应平台定义的,一个虚拟平台可以任意使用该寄存器,但要给出说明。比如,它可以作为一个静态基地址(static base, SB)在一个位置无关数据中; 或者也可以作为线程寄存器(thread register, TR)。

一个被调用程序必须保存寄存器r4-r8,r10,r11的值,因为这些值可能保存着调用程序的某些局部变量。被调用程序还必须保存SP寄存器,以在返回时恢复调用前的栈信息。

在所有的程序调用标准中,寄存器 r12-r15都有着特殊的角色,用IP、SP、IR、PC来表示。

寄存器CPSR(当前程序状态寄存器)包含以下特性:

The N, Z, C, V and Q bits (bits 27-31) and the GE[3:0] bits (bits 16-19) are undefined on entry to or return from a public interface. The Q and GE[3:0] bits may only be modified when executing on a processor where these features are present。

On ARM Architecture 6, the E bit (bit 8) can be used in applications executing in little-endian mode, or in bigendian-8 mode to temporarily change the endianness of data accesses to memory. An application must have a designated endianness and at entry to and return from any public interface the setting of the E bit must match the designated endianness of the application

The T bit (bit 5) and the J bit (bit 24) are the execution state bits. Only instructions designated for modifying these bits may change them

The A, I, F and M[4:0] bits (bits 0-7) are the privileged bits and may only be modified by applications designed to operate explicitly in a privileged mode.

All other bits are reserved and must not be modified. It is not defined whether the bits read as zero or one, or whether they are preserved across a public interface.

ARM架构中的程序执行与调用

位作用
N   负标志位,当运算结果为负时,该位被置1  
Z   零标志位,当运算结果为零时,该位被置1  
C   进位and借位标志,当运算结果为负时,该位被置1  
V   溢出标志,有符号溢出时,该位被置1  
Q   溢出饱和标志,在一些DSP指令中,该位指示是否发生溢出或者饱和  
GE[3:0]   大于等于标志  
E   装载、存储字节序  
A   disable data aborts when it is set  
I   disable IRQ when it is set  
F   disable FIQ when it is set  
M[4:0]   处理器运行模式  

处理器的运行模式如下所示:

ARM架构中的程序执行与调用

3.2 ARM中程序的栈、内存

AAPCS 应用于单线程执行,程序状态保存在机器寄存器及该程序可访问的内存里面。一个进程可访问的内存是可以在执行中变化的。

程序的内存可以分为以下五个部分:

Code 代码段,只读,存放指令代码

Read-only static data, 只读的静态数据区

Writable static data, 可写的静态数据区

the heap, 堆

the stack, 栈

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6fd0495a44c291975fa5d1f855a7eb77.html