裸机开发(2) Cortex-A7简介 常用ARM汇编指令

1.Cortex-A处理器运行模型

ARM的A系列处理器有9种运行模型:User、FIQ、IRQ、Supervisor(SVC)、Abort、Undef,Monitor,Hyp和System,其中User是非特权模式,其余6中都是特权模式。这9个运行模式可以通过软件、中断或者异常来进行切换。大多数的程序都运行在User模式,是不能访问系统所有资源的,要想访问这些受限的资源就必须进行模式切换。但用户模式不能直接进行切换,需要借助异常来完成模式切换,当要切换模式的时候,应用程序可以产生异常,在异常的处理过程中完成处理器模式切换。当中断或者异常发生以后,处理器就会进入到相应的异常模式种,每一种模式都有一组寄存器供异常处理程序使用,目的是为了保证在进入异常模式以后,用户模式下的寄存器不会被破坏。
STM32只有特权模式和非特权模式,但Cortex-A 就有 9 种运行模式。
在这里插入图片描述

2.Cortex-A寄存器组

2.1.寄存器组简介

ARM架构有16个32位的通用寄存器,R0~R14可以用作通用的数据存储,R15是程序计数器PC,用来保存将要执行的指令。另外还有“当前程序状态寄存器CPSR”和“备份程序状态寄存器SPSR”,SPSR是CPSR寄存器的备份。

在这里插入图片描述
Cortex-A7 9种模式对应的寄存器如下图,蓝色背景的是各个模式所独有的寄存器。在所有的模式中,低寄存器组(R0 ~ R7)共享同一组物理寄存器,但一些高寄存器组在不同的模式有自己独有的寄存器。
在这里插入图片描述

2.2.通用寄存器

R0~R15 通用寄存器,可以分为以下三类:
①、未备份寄存器,即R0~R7。
②、备份寄存器,即R8~R14。
③、程序计数器PC,即R15。

  1. 未备份寄存器
    R0 ~ R7。在所有的处理器模式下这8个寄存器都是同一个物理寄存器;在不同的模式下这8个寄存器中的数据就会被破坏。
  2. 备份寄存器
    R8 ~ R12有两种物理寄存器,在快速中断模式下(FIQ)它们对应着Rx_irq(x=8 ~ 12)物理寄存器,其他模式下对应着Rx(8 ~ 12)物理寄存器。因为FIQ模式下的R8 ~ R12是独立的,因此中断处理程序可以不用执行保存和恢复中断现场的指令,从而加速中断的执行过程。
    R13共有8个物理寄存器,一个是用户模式(User)和系统模式(Sys)共用的,剩下7个分别对应7种不同的模式。R13也叫做SP,用来做为栈指针应用程序会初始化R13,使其指向该模式专用的栈地址,这就是常说的初始化SP指针。
    R14共有7个物理寄存器,其中一个是用户模式(User)、系统模式(Sys)和超级监视模式(Hyp)所共用的,剩下的6个分别对应6种不同的模式。R14也称为连接寄存器(LR),其在 ARM中主要用作如下两种用途:
    ①、每种模式使用R14(LR)存放当前子程序的返回地址,如果使用BL或者BLX来调用子函数,R14(LR)被设置成该子函数的返回地址,在子函数中,将R14(LR)中的值赋给R15(PC)即可完成子函数返回。两种方法代码如下:
方法1.在子函数中编写:
MOV PC, LR //寄存器 LR 中的值赋值给 PC,实现跳转

方法2.在子函数入口将LR入栈:
PUSH 
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值