ARM寄存器与ATPCS/AAPCS

ARM寄存器与ATPCS/AAPCS

整理于《ARM体系结构与编程》

为了使单独编译的C语言程序和汇编语言之间能够相互调用,必须为子程序间的调用制定一定规则。

  • ATPCS (ARM-Thumb Procedure Call Standard)

  • AAPCS (ARM Archtecture Procedure Call Standard)

AAPCS ≈ ATPCS plus

零.ARM处理器的运行模式

处理器模式描述
用户模式 正常程序执行模式
快速中断模式 用于高速数据传输和通道处理
外部中断模式 用于通常的中断处理
特权模式 供操作系统使用的一种保护模式
数据访问中止模式 用于虚拟存存储及存储保护
未定义指令中止模式 用于支持通过软件仿真硬件的协处理器
系统模式 用于运行特权级的操作系统任务

0.1 Cortex-M 系列来讲

两种操作状态:

- 调试模式
- Thumb状态(无ARM指令集)

两种模式:

  • 处理模式:执行中断服务,总是具有特权访问
  • 线程模式:执行普通应用程序代码

运行模式:

  • 特权访问
  • 非特权访问

一. 寄存器

37个寄存器

  • 31个通用寄存器
    • 未备份寄存器 R0 - R7
    • 备份寄存器 R8 - R14
    • 通用寄存器 R15 (PC)
  • 6个状态寄存器

二.通用寄存器

2.1 未备份寄存器

在所有运行模式下,都是同一个寄存器

2.2 备份寄存器

R8 - R12

仅有两组寄存器,即usr和fiq

R13

习惯上用作Stack寄存器,每种异常模式,都有自己的R13寄存器,在进入异常模式时,可用R13保存栈指针,退出异常模式时,可保存完整的上下文。

R14 :Link Register

  • 存放当前子程序的返回地址
  • 异常中断发生时,该异常模式的R14用于返回地址

R15:程序指针寄存器

流水线机制,其值为当前指令+N

2.3 通用寄存器

CPSR:当前程序状态寄存器

SPSR:备份程序状态寄存器

  • 条件标志位

  • Q标志位

  • CPSR控制位:处理器模式

三. ATPCS

3.1 什么是ATPCS?

ARM程序和Thumb程序中子程序调用规则

  • 各寄存器使用规则及相应名称
  • 数据栈使用规则
  • 参数传递规则

3.2 各寄存器使用规则及相应名称

R0 - R3 : 子程序传递参数

R4 - R11:子程序保存局部变量

R12:子程序间的scratch寄存器,记为IP 暂存寄存器 ?

R13:sp,栈指针寄存器。在进入子程序时,和退出子程序时,值必须相等。

R14:lr,用于保存子程序的返回值

R15:PC

;Uboot程序中主程序调用 cpu_init_crit函数,在这个cpu_init_crit函数中有下面的代码:

mov ip, lr
bl lowlevel_init
mov lr, ip
mov pc, lr

;这个代码在调用lowlevel_init函数之前,先将lr存储在R12,
;之后在lowlevel_init函数调用返回之后使用mov lr,ip
;将之前保存的返回地址再一次存储到lr寄存器。

3.3 数据栈使用规则

FULL栈:

栈指针,始终指向栈顶元素时

入栈时,需要移动栈指针

EMPTY栈:

栈指针,指向栈元素的下一个地址

入栈时,当前地址可直接使用

DESCENDING栈:

数据栈向内存地址减小的方向增长时

初始化栈的时候,从高地址开始存

ASCENDING栈:

数据栈向内存地址增加的方向增长时

初始化栈的时候,从低地址开始存

  • **FD:**FULL DESCENDING ( ATPCS规定 )

  • **ED:**EMPTY DESCENDING

  • FA: FULL ASCENDING

  • EA: EMPTY ASCENDING

几个栈参数:

  • Stack Pointer
  • Stack Base
  • Stack Limit
  • Used Stack
  • Unuesd Stack
  • Stack Frames

3.4 参数传递规则

1.参数个数可变的子程序的参数传递规则

​ 不超过四个用R0 -R4,超过用数据栈

2.参数个数固定的子程序的参数传递规则

​ 浮点运算传递规则 + 同上规则

3.子程序结果返回规则

​ 32bit:R0

​ 64bit:R0 和 R1

​ 浮点数:浮点运算寄存器

四.典型数据结构

c16351d445e9e86067aff2bc210c5c96.pngc16351d445e9e86067aff2bc210c5c96.png

posted @ 2020-03-06 11:05  Peong  阅读(860)  评论(0编辑  收藏  举报