ARM中的寄存器

这篇具有很好参考价值的文章主要介绍了ARM中的寄存器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ARM工作模式

  • ARM有8个基本的工作模式
    • User 非特权模式,一般在执行上层的应用程序时ARM处于该模式
    • FIQ 当一个高优先级中断产生后ARM将进入这种模式
    • IRQ 当一个低优先级中断产生后ARM将进入这种模式
    • SVC 当复位或执行软中断指令后ARM将进入这种模式
    • Abort 当产生存取异常时ARM将进入这种模式
    • Undef 当执行未定义的指令时ARM将进入这种模式
    • System 使用和User模式相同寄存器集的特权模式
    • Monitor 为了安全而扩展出的用于执行安全监控代码的模式
注意:
1.每个模式的优先升级是不同的,例如当处于IRQ模式下时 FIQ中断可以打断 IRQ模式切换到FIQ模式下
2.启动阶段处于SVC模式
3.在keil调试中,我们可以手动的从user模式切换到SVC模式,但是不弄从SVC切换到user模式
4.FIQ、IRQ、SVC、Abort、Undef属于异常模式,即当处理器遇到异常后会进入对应的模式
5.不同模式下有不同的权限,执行不同的工作

ARM寄存器

  • ARM寄存器为R0 R1 R2 … R15 (cpsr spsr)寄存器是处理器的内存存储器,没有地址
    CPU可以直接操作通用寄存器,如:
MOV R1,#1
MOV R2,#2
ADD R2,R1,R2

注:SOC上的外设也是有寄存器的,但是外设的寄存器,是通过内存映射表,映射到内存地址的,他是有地址的

  • ARM寄存器作用:暂时的存储数据和运算结果
  • ARM寄存器分类:通用寄存器、专用寄存器、控制寄存器
    ARM中的寄存器
    上图可以看出ARM一共有40个寄存器,带三角符号的是特定模式下的存取器
    • 在某个特定模式下只能使用当前模式下的寄存器,一个模式下特有的寄存器其他模式下不可使用

举例:

user模式下的r0 ~ r7  在FIQ模式下同样可以使用 而FIQ模式下的r8_fiq ~ r14_fiq只有在FIQ模式下可以
使用,以及SPSP_fiq也只有FIQ模式下可以使用

同理 看下IRQ模式 user模式下的r0 ~ r12  在IRQ模式下同样可以使用  而IRQ模式特有的r13_irq
r14_irq 和spsr_irq只有该模式下可以使用

为什么一共有40个寄存器
ARM中的寄存器

红 17 + 黄 8 + 3 + 3 + 3 + 3 + 3 = 40

为社么要保留r0~r7每个模式下都可以公用?

用于在不同模式之间传输数据

专用寄存器

r15——PC指针

r15就是我们常说的PC指针

  • 程序计数器,用于存储当前取址指令的地址
r14 ——LR
  • 用于存放下一条指定地址
    当我们使用bl指令或产生异常时,跳转前将bl指令的下一条指令的地址存到lr中当其返回时
    把LR中存储的地址给PC
MOV CP,LR
r13——sp
  • 栈指针,指向栈顶
  • 使用前需要将栈初始化,如将SP指向可用的ddr空间

CPSR寄存器(Current Program Status Register)

当前程序状态寄存器
ARM中的寄存器
ARM中的寄存器
Bit[4:0] 表示程序目前处于什么状态
Bit[5] 指令集 一般都为ARM状态

  • Bit[6] Bit[7] 分析 它代表这FIQ和IRQ禁止和使能,在不同模式下其状态是不一样的
  • 例如在USER模式下 来了一个IRQ中断 程序切换为IRQ模式 同时IRQ状态改为禁止 表示不会处理其他的IRQ中断 但是FIQ的状态会是开启,当有新的FIQ中断时 会从IRQ切换到FIQ模式 因为FIQ具有更高的优先级
  • 同理 在FIQ模式下 新的IRQ和FIQ中断不打断当前的FIQ中断 除非有更高优先级的中断

ARM中的寄存器
用于加减计算
ARM寄存器为32位,按理说只能进行32位以内的运算,但实际ARM运用了将大数换成小数,然后利用进位的方法来计算大数的加减例如

0x1000000002           0x1        0x00000002 
+                 =>    +             +
0x3000000004           0x3        0x00000004
					   0x4        0x00000006 =>  0x400000006

但是这样也会有新的问题 那就是进位

0x1ffffffff            0x1        0xffffffff
+                 =>    +             +
0x3000000001           0x3        0x00000001
					   0x4        0x00000000 =>  0x400000000 这个结果显然不对
					   此事就需要bit[29] 位
					           当运算器中进行加法运算且产生进位时该位自动置1,否则为0
					   当加法运算 bit[29] 位为1时 需要进位因此还需要加1+
					   0x1
					   0x5        0x00000000 =>  0x500000000

减法同理文章来源地址https://www.toymoban.com/news/detail-435657.html

到了这里,关于ARM中的寄存器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ARM寄存器组织

     ARM有37个32位长的寄存器: 1个用做PC(Program Counter); 1个用做CPSR(Current Program Status Register); 5个用做SPSR(Saved Program Status Registers); 30个通用寄存器。 ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄存器均为32位的寄存器。6个状态寄存器,用以标识CPU的工作状

    2024年02月01日
    浏览(78)
  • ARM寄存器组

    CM3 拥有通用寄存器 R0‐R15 以及一些特殊功能寄存器。 R0-R7也被称为低组寄存器,所有指令可以访问它们,它们的字长为32位,复位后的初始值是不可预料的。 R8-R12也被称为高组寄存器,所有指令可以访问它们,它们的字长为32位,复位后的初始值是不可预料的。 R13寄存器中

    2024年02月10日
    浏览(50)
  • ARM架构(寄存器点灯)

    本篇文章我们来讲解一下如何使用寄存器点亮一个LED灯,一般对于新人来说都是使用HAL库或者标准库来操作的,但是学习寄存器有助于我们了解更加深入的知识,这加会提高我们对ARM架构的理解。 首先第一步我们需要先找到LED的原理图,确定对应的引脚,然后知道是高电平点

    2024年02月15日
    浏览(61)
  • 12.3 ARM寄存器组织

    目录 ARM寄存器组织(一) 寄存器 概念 作用 分类 ARM寄存器 ARM寄存器组织(二) 专用寄存器 R15(PC,Program Counter) R14(LR,Link Register) R13(SP,Stack Pointer) ARM寄存器组织(三) CPSR寄存器 ARM寄存器组织(一) 寄存器 概念 寄存器是处理器内部的存储器,没有地址 C语言中register存储在寄

    2024年02月13日
    浏览(40)
  • ARM编程模型-寄存器组

    Cortex A系列ARM处理器共有40个32位寄存器,其中33个为通用寄存器,7个为状态寄存器。usr模式和sys模式共用同一组寄存器。 通用寄存器包括R0~R15,可以分为3类: 未分组寄存器R0~R7 分组寄存器R8~R14、R13(SP) 、R14(LR) 程序计数器PC(R15)、R8_fiq-R12_fir为快中断独有 在不同模式下,名称相同的

    2024年02月10日
    浏览(49)
  • ARM64 寄存器、常用汇编指令收集

    ARM64 有34个寄存器,包括31个通用寄存器、SP、PC、CPSR。 寄存器 位数 描述 x0-x30 64bit 通用寄存器,如果有需要可以当做32bit使用:WO-W30 FP(x29) 64bit 保存栈帧地址(栈底指针) LR(x30) 64bit 通常称X30为程序链接寄存器,保存子程序结束后需要执行的下一条指令 SP 64bit 保存栈指针,使用

    2023年04月20日
    浏览(44)
  • ARM汇编寄存器和常用指令详解

    对于32位及其以下的ARM处理器来说,函数调用规则如下: 父函数与子函数的入口参数以此通过 R0~R3 这4个寄存器传递。 父函数在调用子函数前先将子函数入口参数存入 R0~R3 寄存器中,若只有一个入口参数则使用 R0 寄存器传递,若有2个入口参数则使用 R0 和 R1 寄存器传递,以

    2024年02月03日
    浏览(54)
  • 【ARM】——当前程序状态寄存器 CPSR

    Current Program Status Register 即 CPSR,当前程序状态寄存器,可以在任何处理器模式下被访问。它包含了条件标志位、中断禁止位,当前处理器模式标志以及其他的一些控制和状态位。 除了 usr 和 sys 模式外,每一种处理器模式下都有一个专用的物理寄存器,称为 SPSR(备份程序状态寄

    2024年02月03日
    浏览(49)
  • day3 ARM寄存器组织

    目录 寄存器  ARM寄存器 专用寄存器 CPSR寄存器 概念: 寄存器是处理器内部的存储器,没有地址; 作用: 一般用于暂时存放参与运算的数据和运算结果; 分类: 包括通用寄存器、专用寄存器、控制寄存器;   注:在某个特定模式下只能使用当前模式下寄存器,一个模式下

    2024年02月08日
    浏览(52)
  • optee读取Arm系统寄存器的模板

    快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】: 【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 联系方式-加入交流群 ---- 联系方式-加入交流群 先写一个通用的内联函数模板,然后再通过宏控来定义各种读写函数。

    2024年02月12日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包