目录

1、ARM寄存器

1.1、CPU内部的存储单元存在单位:

1.2、通用寄存器(R0-R12)

1.2.1、特殊功能寄存器

1.3、状态寄存器

1.4、条形码标志

1.5、协处理器

1.6、Jazelle状态

1.7、指令流水线

2、异常

2.1、异常源

2.2、异常产生时发生的硬件操作

2.2.1、保存执行状态

2.2.2、模式切换

2.2.3、保存返回地址

2.2.4、跳入异常向量表

2.3、异常向量表

2.4、异常处理


1、ARM寄存器

寄存器:是一种特殊的存储器,在CPU内部,可以用来存储数据,但是存储的内容有一定作用。

对于CortexA有40个寄存器,每个寄存器有32bit,寄存器没有地址,用编号来表示。

1.1、CPU内部的存储单元存在单位:

  • word:字-----------32bit

  • halfword:半字---16bit

  • bitByte:字节-----8bit

1.2、通用寄存器(R0-R12)

小三角的是私有性寄存器,未加小三角的是通用的寄存器

  • 未分组寄存器:R0-R12,在所有模式下,未分组寄存器都是指向同一个物理寄存器,如果存在模式转换时,不同的模式都使用相同的寄存器,所以可能造成寄存器的数据破坏,应该工作模式切换时要保存。
  • 分组寄存器:R13(SP)、R14(LR) FIQ是 R8-R12,每次访问寄存器都与当前的工作模式相关,不同的模式都有不同的寄存器
  • 程序计数器(指令寄存器/程序状态寄存器):R15(PC)

1.2.1、特殊功能寄存器

  • R13(堆栈指针寄存器SP),存储栈的栈顶位置地址,与内存相关。
  • R14(链接寄存器LR),当程序跳转、函数调用、产生异常。
  • R15(程序寄存器PC),当前执行的下一条指令地址,会自动由硬件修改,也可以由我们操作改变。

ARM指令:一条ARM指令有4个字节,所以指令偏移大小为4个字节,指令地址是4的整数倍,所以程序计数器最低2位无效(低2位地址为0-3)。

Thumb指令:大小为2个字节,所以程序计数器最低位无效。

1.3、状态寄存器

程序状态寄存器CPSR、SPSR

  • CPSR(程序状态寄存器):存储当前CPU执行程序时的工作状态,CPU在工作时只会有一个工作状态,所以所有的工作模式都是同一个CPSR,所有工作模式都可以访问到CPSR。
  • SPSR(程序状态寄存器):备份当前状态的寄存器,保存当前的CPSR值,然后改变CPSR,异常结束时,回到之前的工作模式,就把SPSR的值恢复到CPSR。

1.4、条形码标志

31-28Bit条件码标志 ​ N Z C V都是条件码标志,它们的内容可以被算数运算或逻辑运算的结果修改。

  • N : 当两个有符号数〈用补码表示)进行运算时,用N=1表示运算结果为负数,N=0表示运算结果为整数或零
  •   Z : Z=1表示运算结果为0,Z=0表示运算结果为非O
  •  C : 运算加法产生进位,减法产生借位,运算加法时,如果产生了进位时C=1,否则C=0,减法运算时,如果产生了借位时C=O,否则C=1。进行包含移位操作的非加法/减法的指令时,C为移出值的最后一位,其他耳加法/减法指令时,C通常不变。
  •  V :进行有符号位(补码表示)运算时,符号位溢出,V=1。
  • 27Bit:Q,ARMV5架构以上的E系列使用,表示增强的DSP运算是否发生了溢出,其他处理器,Q没有意义。
  • 24Bit:J,T=0,J=1,处理器是处于JaZelle状态
  •    9Bit:E,大小端的控制
  •         8Bit:A=1,禁止不精确的数据异常
  •     7Bit:I=1,禁止IRQ中断
  •         6Bit:F=1,禁止FIQ中断
  •         5Bit:T=0,J=0,处理器处于ARM状态(32位指令),解析ARM指令。

T=1,J=0,处理器处于Thumb状态(16位指令)。

T=1,J=1,处理器处于ThumbEE状态

4-0Bit:工作模式

  • 用户模式(user):0B10000----R0-R14、PC、CPSR

  • 快速中断模式FIQ : 0b10001-----RO-R7,R8_FIQ-R14_FIQ, PC,CPSR,SPSR

  • 一般中断模式IRQ:0b10010

  • 管理模式supervisor:0b10011

  • 中止模式abort:0b10111

  • 未定义模式undefined:ob11011系统模式

  • system:0b11111

  • Cortex-A特有安全模式monitor:0b10110

1.5、协处理器

ARM体系架构允许通过添加协处理器来扩展指令集,每个协处理器执行指令时,会忽略处理器和其他协处理器的指令当协处理器也不能识别指令时,也会产生未定义异常。

ARM协处理器指令分为三类:

  • 用于ARM处理器初始化ARM协处理器的数据操作

  • 用于ARM处理器的寄存器和ARM协处理器的寄存器之间的数据传输操作

  • 用于ARM协处理器的寄存器和内存之间数据传输操作

1.6、Jazelle状态

在ARM处理器种有Jazelle技术,实现在ARM处理器种能够直接在硬件上提供了对java字节码的支持,提高系统效率。

java字节码就是]B-bits独立架构的指令集

1.7、指令流水线

指令流水线:让CPU内部的多个部件并行工作,以缩短程序的执行时间,提高了处理器的效率,所以处理器架构设计时,其作为最重要的技术进行使用。

三级流水线:

  • (1)取址(PC取址)

  • (2)译码

  • (3)执行

指令的取址、译码、执行的这三个执行过程,将其变成流水线形式执行,就是三级流水线指令。

ARM架构升级,流水线也在增加,但是ARM公司没有提供对应的技术,但是不管是几级流水线都可以按照三级流水线的操作方式来思考。

2、异常

在CPU执行程序(指令)时,有可能会出现意外情况,需要去解决对应的意外情况,就叫做异常

2.1、异常源

在ARM体系结构中设计了7种异常源,ARM架构就需要对这些异常源进行处理,只要执行程序指令时产生对应的异常就会执行对应的异常处理。

只要发生对应的异常时,处理器就会把PC寄存器设置为特定的存储器地址。这个地址被放在称为向量表的范围内,向量表内就是一些跳转操作。即CPU设计了一个向量表来表示每一种异常的处理方式,只要产生异常,PC寄存器就会被设置为向量表种的对应异常的地址,执行异常向量表中的对应指令(跳转执行,执行对应的处理办法)。

ARM异常源

异常源 对应异常
Reset 上电执行
undef 当流水线中某个非法指令被执行(undefined)
swi 当程序执行软中断指令时(supervisor svc)
Prefetch 当指令从内存进行存取指令失败时(abort)
Data 当指令从内存存取数据失败时(abort)
IRQ 一般中断
FIQ 快速中断

2.2、异常产生时发生的硬件操作

2.2.1、保存执行状态

把CPSR寄存器的内容复制到对应产生异常的模式下的SPSR。

2.2.2、模式切换

  • 由硬件自动把cpsr中的模式[4 :0]设置为与异常相对应的值

  • 处理器设置为ARM状态,执行ARM指令

  • 禁止中断,如进入FIQ模式自动把IRQ中断禁止

2.2.3、保存返回地址

把当前的下一条指令的地址保存到 LR_mode寄存器(异常模式下)

2.2.4、跳入异常向量表

强制设置PC寄存器为对应异常向量地址

2.3、异常向量表

异常面量表是一段特定的内存空间,每一种ARM异常都在异常向量中设定出来,对应一个字长空间4Byte(32bit),就是一条ARM指令大小,产生异常时,CPU强制把PC的值设置为对应异常的地址。

当产生异常后,硬件能够完成的操作就只是跳转到异常向量表(d赋值为异常向量地址),剩下的异常处理都是由程序员完成。通常在向量中写一条跳转指令,表示异常应该怎么做,跳转到对应的地址(异常处理地址)执行。

实现异常向量表,完成异常设定。

2.4、异常处理

异常处理是由自己实现的

(1)保存现场(进入异常之前寄存器的值)

将寄存器的值保存到对应异常模式下的栈(内存)(入栈),SP寄存器存栈地址。

(2)执行对应的异常操作

(3)恢复之前现场

  • 当异常处理完,要返回异常之前的状态,继续执行

  • 恢复之前的寄存器数据(从sp对应的栈出栈存储到对应寄存器)

  • 恢复程序运行是的状态cpsr

  • 通过异常逛入时保存的返回地址(Ir寄存器),可以返回到被打断的程序继续执行

-------------------------------------------------到这里已经结束了哦-----------------------------------------------------

【ARM】寄存器与异常——第二篇相关推荐

  1. ARM体系结构与编程(篇二):ARM体系架构与寄存器介绍

    文章目录 前言 一.ARM内核与架构 1.1 ARM芯片的组成 1.2 ARM指令集与架构 二.ARM处理器模式与寄存器 2.1 ARM处理器模式 2.2 ARM寄存器 前言 该文章是通过学习< ...

  2. 【嵌入式开发】ARM 芯片简介 (ARM芯片类型 | ARM处理器工作模式 | ARM 寄存器 | ARM 寻址)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42375701 相关资源下载 :  -- 三星 ARM Archit ...

  3. 第二篇|腾讯开源项目盘点:ncnn、xLua、libco等

    开源展示了人类共同协作,成果分享的魅力,每一次技术发展都是站在巨人的肩膀上,技术诸多创新和发展往往就是基于开源发展起来的,没有任何一家网络公司可以不使用开源技术,仅靠自身技术而发展起来. 腾讯开源了个 ...

  4. ARM 寄存器 详解

    From( ARM 寄存器详解 ):https://blog.csdn.net/sandeldeng/article/details/52954781 ARM 汇编基础教程:2.数据类型和寄存器:ht ...

  5. imx6ull移植Linux系统第二篇——Linux内核的移植

    imx6ull移植Linux系统第二篇--Linux内核的移植 花了大概两周的时间,把Linux的移植认真学了一遍,期间踩了不少坑,花费了不少时间去解决各种奇奇怪怪的问题,最终完成了uboot.系统镜 ...

  6. swi 指令能用在C语言吗,ARM的SWI异常中断处理程序设计

    原标题:ARM的SWI异常中断处理程序设计 本节主要介绍编写 处理程序时需要注意的几个问题,包括判断SWI中断号,使用汇编语言编写SWI异常处理函数,使用C语言编写SWI异常处理函数,在特权模式下使用 ...

  7. ARM寄存器的7种工作模式和几种寻址方式

    ARM寄存器的7种工作模式 CPSR[5:0] 10000 user 10001 FIQ 10010 IRQ 10011 SVC 10111 中止 11011 未定义 11111 系统 用这两个指令读 ...

  8. rk3568硬件开发笔记(第二篇 ) 外围模块设计

    rk3568硬件开发笔记(第二篇 ) 外围模块设计 前言: rk3568处理器属于中高端通用型SOC,RK3568兼具CPU.GPU.NPU.VPU于一身,是一款高性能低功耗四核应用的处理器. rk3 ...

  9. ARM 寄存器 和 工作模式了解

    一. ARM 工作模式 1.   ARM7,ARM9,ARM11,处理器有 7 种工作模式:Cortex-A 多了一个监视模式(Monitor) 2.  用户模式:非特权模式,大部分任务执行在这种模式 ...

最新文章

  1. Python 解决一行代码分成多行及多行代码放在一行
  2. 2.4亿!知乎到底牛X在哪里!
  3. Most Powerful
  4. 使用阿基米德螺线进行数据可视化
  5. Solaris11创建NFS服务
  6. Date类型之组件方法
  7. Windows 新建文本文档快捷键设置
  8. php抓包腾讯大王卡token,【大王卡专用抓包教程,内附视频链接】动态抓包
  9. 吹塑模具和注塑模具的区别
  10. tplink怎么进去_怎么进入TP-Link路由器设置界面? | 192路由网
  11. ArcGIS 教程:Workflow Manager 高速浏览
  12. UVA1723 Intervals
  13. iPhone 8价格已破发!苹果无奈只能减产
  14. Python------2022-1-11作业
  15. 湖南省工信厅党组书记、厅长雷绍业一行莅临麒麟信安调研
  16. 华为云服务器协议,云服务器协议
  17. 【管理篇 / 诊断】❀ 01. 了解防火墙的性能参数 ❀ FortiGate 防火墙
  18. 毕业设计-基于SSM医院信息管理系统
  19. PMP知识点:项目管理十大知识领域和47个过程
  20. My Interview

热门文章

  1. android手机信号测试,买手机别只看性能!教你测试手机信号好坏
  2. 【高等数学】一元函数微积分学
  3. JavaScript 的发展历史
  4. 增加开机logo和动画。
  5. mongodb 基础入门
  6. 29. Compose实现瀑布流 StaggeredGrid
  7. 九年级计算机课教学计划,九年级下学期计算机学科教学计划.doc
  8. 骗子不可怕,就怕骗子有文化
  9. 【Doris】Apache Doris 索引机制解析
  10. java web 网上商城_JavaWeb项目--网上商城 (6-2)