ARM汇编 1.arm架构

ARM处理器工作模式

Cortex-A系列的8种工作模式,比起Cortex-M系列多了monitor模式

在这里插入图片描述

只需掌握用户模式、一般中断模式、管理模式

异常源

在这里插入图片描述

不同的异常源会进入不同的工作模式

  • FIQ异常 => FIQ模式
  • IRQ异常 => IRQ模式
  • Prefetch、Data异常 => 中止模式
  • Undef => 未定义指令中止模式
  • SWI、reset异常 => 管理模式

ARM寄存器

在这里插入图片描述

  • R8-R14对于另外6种异常模式有不同的含义,和系统/用户模式下的可能不一样(根据图中的三角标志区分)
  • SPSR针对不同的异常有不同的状态含义
  1. 未分组寄存器R0-R7:所有模式下指向同一个寄存器,在切换模式的时候要注意这部分寄存器的数据保护
  2. 分组寄存器R8-R14:对应的物理寄存器与所处模式有关,采用_mode来区分不同的寄存器
  3. 堆栈寄存器R13(SP):堆栈指针,用来指向不同模式下的栈空间
  4. R14(LR)链接寄存器:当进行子程序跳转时,R14保存PC的值,在执行完子程序后,通过读取R14的值来返回原来的程序位置。
  5. R15(PC)程序计数器:PC值 = 当前程序执行位置 + 8 (多级流水线技术)
  6. CPSR:当前程序状态寄存器,存储了一些信息:主要包括处理器模式、处理器状态、中断禁止位、条件位
  7. SPSR:备份的程序状态寄存器,当异常发生时,保存当前CPSR的值,从异常退出后用SPSR恢复CPSR

在这里插入图片描述

协处理器

ARM体系结构通过协处理器来扩展指令集,最常用的协处理器是用于控制片上功能的系统协处理器。

控制Cache和存储管理单元MMU的CP15协处理器、设置异常向量表地址的mcr指令。

指令流水线

在这里插入图片描述

3级流水线:取值、译码、执行

因此正在执行的指令其实是PC-8(对于32位机,一条指令是32位/4字节),间隔两个字节,每个周期同时进行一条指令的执行、下一条指令的译码、下下条指令的预取。

理想的最佳流水线如图:在第一个时间周期,完成了ADD指令的执行、SUB指令的译码、ORR指令的取指

在这里插入图片描述

还有LDR流水线(从外存中取数据)、分支流水线、中断流水线

都不是理想的流水线、存在一些周期完成一些特定的任务,如保护现场、保存R14、CPSR->SPSR等。

相关推荐

  1. ARM 汇编入门

    2024-02-03 18:22:02       52 阅读
  2. arm 汇编调用C

    2024-02-03 18:22:02       53 阅读
  3. ARM汇编点灯

    2024-02-03 18:22:02       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-03 18:22:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-03 18:22:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-03 18:22:02       82 阅读
  4. Python语言-面向对象

    2024-02-03 18:22:02       91 阅读

热门阅读

  1. oracle 修改表结构语句

    2024-02-03 18:22:02       43 阅读
  2. AIGC开发 -- 本地方法与AI的互动Function calling

    2024-02-03 18:22:02       55 阅读
  3. 内核升级!IvorySQL 3.1 发版

    2024-02-03 18:22:02       49 阅读
  4. MySQL中的视图与索引

    2024-02-03 18:22:02       48 阅读
  5. ES5/ES6 的继承除了写法以外还有什么区别?

    2024-02-03 18:22:02       45 阅读
  6. Unity3D开发之鼠标单双击判断

    2024-02-03 18:22:02       52 阅读
  7. 大小相等的numpy数组运算及数组与标量的运算

    2024-02-03 18:22:02       47 阅读
  8. LeetCode每日一题 | 1686. 石子游戏 VI

    2024-02-03 18:22:02       60 阅读
  9. How to switch CRAN of R language to Tsinghua mirror in ubuntu

    2024-02-03 18:22:02       56 阅读
  10. Ubuntu 关闭rsyslog,var/log/syslog文件过大解决

    2024-02-03 18:22:02       48 阅读
  11. 头歌C++之函数进阶练习题

    2024-02-03 18:22:02       51 阅读