ARM通识——ARM的7种基本工作模式、37个通用寄存器

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

一、ARM采用32位架构

ARM约定一个Byte是8 bits,一个Halfword是16 bits (2 byte),一个Word是32 bits (4 byte)。

大部分ARM core 提供ARM 指令集(32 bit,每条指令都是4个字节),Thumb 指令集(16bit),Thumb2指令集(16 & 32bit)。

二、ARM的7种基本工作模式

ARM的工作模式分为普通模式、特权模式,其中特权模式又细分为六种模式。

诸多模式是为了满足操作系统的安全等级需要,各种模式下可以访问的寄存器不同。

注意,同一时刻CPU只处于其中一种模式。

程序员可以修改CPSR寄存器,实现各个模式的切换;CPU在某些情况下也会自动切换。

普通模式(Normal)

(1)用户模式(User):非特权模式,大部分任务执行在这种模式。

特权模式(Privilege)

(2)快速中断模式(FIQ):当一个高优先级(fast) 中断产生时将会进入这种模式。

(3)普通中断模式(IRQ):当一个低优先级(normal) 中断产生时将会进入这种模式。

(4)超级用户模式(SVC):当复位或软中断指令执行时将会进入这种模式。

(5)中止模式(Abort):当存取异常时将会进入这种模式。

(6)未定义模式(Undef):当执行未定义指令时会进入这种模式。

(7)系统模式(System):使用和User模式相同寄存器集的特权模式。

三、ARM的37个通用寄存器

1、寄存器分类

SoC中有2类寄存器,即通用寄存器、特殊功能寄存器(SFR,special function register)。

(1)通用寄存器

通用寄存器是CPU的组成部分,CPU的很多活动都需要通用寄存器的支持和参与。

通用寄存器没有地址,通过寄存器名字来访问。

ARM一共有37个通用寄存器。

(2)特殊功能寄存器

特殊功能寄存器,属于外设硬件的组成部分。使用软件编程控制某一硬件,其实就是编程读写这个硬件的特殊功能寄存器。

注意,特殊功能寄存器有地址,通过地址来访问寄存器。

2、ARM的37个通用寄存器

(1)影子式设计

注意,上图中除了Abort模式列出所有的寄存器外,其他模式只列出对应位置该模式下特有的寄存器,没有列出的寄存器,则说明和Abort模式共用。比如User模式下有自己的r13和r14寄存器,其他寄存器和Abort模式相同。

这样算下来,ARM总共有 37 个寄存器,但最多只能同时存在18个寄存器。有些寄存器虽然名字相同,但是在当前模式是不可见的。比如在ARM中有6个名叫r13的寄存器,但在特定处理器模式下,只有一个r13是当前可见的,其他的r13必须切换到对应的模式才能看到。这种设计叫影子寄存器。

这样设计的好处是,当各种异常发生的时候,每种异常模式都可以保存一些重要的数据,异常处理程序完成之后返回异常前的程序时,不会破坏原有的寄存器或状态。

(2)重要的寄存器

这37个寄存器都是32位长度,值得重点理解的寄存器有以下几个。

程序控制寄存器(PC,Program Control Register)

这个寄存器存放着将要执行的指令的地址,它指向哪里,CPU就会执行哪条指令,所以程序跳转时把目标代码的地址放到PC寄存器中。注意,整个CPU只有一个PC寄存器。

程序状态寄存器(CPSR,Current Program Status Register)

这个寄存器用来记录CPU的当前状态。注意,整个CPU只有一个CPSR寄存器。

程序状态保存寄存器(SPSR,Saved Program Status Register)

用来保存CPSR的,子程序返回时将SPSR赋给CPSR。注意,整个CPU有5个SPSR寄存器。

连接寄存器(LR,Link Register)

这个寄存器的主要作用如下。

一是调用子程序时,用来保存子程序返回地址(子程序返回时返回到哪个地址)。当通过bl或blx指令调用子程序时,硬件会自动将子程序返回地址保存在LR寄存器中。在子程序返回时,把LR的值复制到PC即可实现子程序返回。比如可以使用mov pc,lr完成子程序返回。

二是当异常发生时,LR中保存的值等于异常发生时PC的值减4,因此在各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行。

四、程序状态寄存器(CPSR)

程序状态寄存器(CPSR)在CPU中只有一个,是32bit的,记录着CPU的当前状态。

程序状态寄存器每个bit的含义如下。

(1)bit31~28是条件位

  • N = Negative result from ALU
  • Z = Zero result from ALU
  • C = ALU operation Carried out
  • V = ALU operation oVerflowed

(2)bit27是Q位

仅ARM 5TE/J架构支持,用来指示饱和状态。

(3)bit24是J位

仅ARM 5TE/J架构支持,J = 1处理器处于Jazelle状态。

(4)bit7~6是中断禁止位

  • I = 1 表示禁止IRQ。
  • F = 1 表示禁止FIQ。

(5)bit5是T位

  • 仅ARM  xT架构支持。
  • T = 0 表示处理器处于 ARM 状态。
  • T = 1 表示处理器处于 Thumb 状态。

(6)bit0~4是Mode位

这是处理器模式位。

(7)总结

CPSR中各个bit位表明了CPU的某些状态信息,这些信息非常重要,和后面学到的汇编指令息息相关(比如BLE指令中的E就和CPSR中的Z标志位有关)。

CPSR中的I、F位和开中断、关中断有关。

CPSR中的mode位(bit4~bit0共5位)决定了CPU的工作模式,在uboot代码中会使用汇编进行设置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以NFS方式挂载rootfs的设置方法

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 更多详细内容,见Linux中NFS服务器的配置(/etc/export)_天糊土的博客-CSDN博客 网络文件系统(NFS,network file system),是一种网络通讯协…

分析根文件系统中的/linuxrc文件(附带busybox的介绍)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客 init进程的详解_天糊土的博客-CSDN博客_init进程 busybox详解_linuxarmsummary的博客-CSDN博客 前言 因为uboot给内核传参的bootargs中有“init/linuxrc”这个项目,而由前面的…

CentOS Linux搭建SVN Server配置详解

PS:今天给开发的同事搭建一个公网的SVN Server,google一下,发现下面这篇最详细,就记录下来,重新排版一下。顺便根据自己的使用经验,补充了几个细节和总结。本文配置是基于CentOS 5.x的,但一样适…

405 Method Not Allowed

当jquery easyui的datagrid插件使用.json文件为数据源,通过非http协议访问【就是直接拖进浏览器查看效果】,能正常加载.json文件并且生成datagrid数据源。但是通过http协议访问示例代码时,无法加载json文件生成datagrid的数据源。 这个是由于…

Eclipse之ANT使用

Ant是Java平台下非常棒的批处理命令执行程序,能非常方便地自动完成编译,测试,打包,部署等等一系列任务,大大提高开发效率。如果你现在还没有开始使用Ant,那就要赶快开始学习使用,使自己的开发水…

idea修改maven项目版本号

1 先安装插件 2 控制台执行命令 mvn build-helper:parse-version versions:set -DnewVersion1.1-SNAPSHOT versions:commit 1.1-SNAPSHOT 为你要修改的版本号 技术交流群: 816227112 有时候命令执行完看不到改变,需要刷新下。 转载于:https://www.cnblo…

几个国外开源CMS系统比较

CMS是Content Management System的缩写,意为"内容管理系统"。上一下度娘或者放一下Google,全球的CMS系统,不下千个,开源的不下百个,如果只是普通用户,很难有时间和精力去比较那么多的系统优劣。不…

javascript函数,值得参考!

2019独角兽企业重金招聘Python工程师标准>>> javascript函数一共可分为五类:   常规函数   数组函数   日期函数   数学函数   字符串函数   1.常规函数   javascript常规函数包括以下9个函数:   (1)alert函数:显…

时钟系统——S5PV210的时钟系统的理论及操作

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考内容 s5pv210——初始化时钟 - biaohc - 博客园 用户手册 一、SoC时钟系统 1、时钟的含义与作用 时钟是同步工作系统的同步节拍。 SoC内部有很多器件,比如CPU、串口、DRAM控制器、…

Oracle 协议适配器错误

1.首先确认你的 OracleDBConsoleORACLE,OracleOraDb11g_home1TNSListener,OracleServiceORACLE 这三个服务是否已经正常的开启。 2. 确认你的listener 的端口是否被占用, 在命令行执行:netstat -aon|findstr "1521" &am…

串口通信——串口通信的基础概念

以下内容源于朱友鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客 同步通信与异步通信区别_wind19的博客-CSDN博客 SPI、I2C、UART(即串口)三种串行总线详解_天糊土的博客-CSDN博客_串口总线 一、电子通信相关的概念 1、同步通信和…

MS CRM 2011 RC中的新特性(9)—全新的工作流 脚本设计模式

MS Dynamics CRM 2011中,在流程处理方面,除了以往版本中具有的工作流之外,又加入了新的内容——脚本Dialog。脚本Dialog,是同步的、需要用户输入内容的流程。当启动了脚本后,系统会弹出向导风格的对话框,用…

串口通信——S5PV210串口通信接口详解

以下内容源于 朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客 s5pv210——串口通信 - biaohc - 博客园 一、S5PV210的串口控制器 S5PV210的串口控制器的相关内容,在用户手册的section8.1章节。 (1)串口控制器包含…

串口通信——S5PV210串口通信的简单案例

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客:s5pv210——串口通信 - biaohc - 博客园 一、代码与测试 1、代码文件 完整的案例文件见链接。 (1)start.S文件 /* * 演示串口通信 */#define WTCON …

iOS学习系列 - 扩展机制category与associative

category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方法;associative,可以通过它来扩展属性;在iOS开发中,可能category比较常见,相对的associative&am…

Spring Boot JWT 快速入门

本章节讨论 jwt 在 spring boot 中的应用。意在快速入门 jwt。 java jdk1.8maven 3.2spring boot 2.0JSON Web Token(JWT) 他是一个用于 Web 身份验证的令牌。 1 JWT 概述 1.1 什么是JWT 直观的理解 JWT 就是一串字符串,如下(来自…

Flex与Java通信之HttpService方式

2019独角兽企业重金招聘Python工程师标准>>> Flex用RemoteObject方式与Java通信是最常用的方式,这是一种最直观的方式。当然Flex也可以用HttpService与服务器类如servlet通信,这也是本次学习的重点。 这次学习是在上节的基础上进行的。本节学…

中断——S5PV210的中断体系简介

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客 s5pv210的中断体系 - biaohc - 博客园 我的RTOS 之一 --S5PV210 异常向量表基址和软中断测试_liujia2100的博客-CSDN博客 从0开始学ARM-异常及中断处理、异常向量表、swi_一口Linux的技术…

中断——S5PV210的中断案例

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客 s5pv210——中断 - biaohc - 博客园 S5PV210的中断体系简介_天糊土的博客-CSDN博客 一、S5PV210的中断流程 第一部分是我们为中断响应而做的预备工作。 1、初始化中断控制器 比如先关闭所…

按键——S5PV210的按键简介(轮询方式+中断方式)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客 s5pv210——按键 - biaohc - 博客园 一、按键的简介 1、按键的物理特性 按钮没有被按下时,内部是断开的。按钮被按下时,内部保持接通状态;放手后由于弹…