首页 > 其他分享 >ARM-V7架构(一)

ARM-V7架构(一)

时间:2024-03-16 16:55:41浏览次数:15  
标签:sp r0 V7 模式 stack mode 寄存器 架构 ARM

cortex-A7基于ARMV7-A架构,复习一下armv7  

ARM-V7的模式类型如下:

0 FIQ快速中断和IRQ外部中断的区别:当一个高优先级中断产生时将会进入FIQ,一般用于高速数据传输和通道处理。当一个低优先级中断产生将会进入IRQ,一般用于通常的中断处理 0   处理器模式可以通过软件控制进行切换,也可以通过外部中断或异常处理过程进行切换。大多数用户程序运行在用户模式下。当处理器工作在用户模式时,应用程序不能访问受操作系统保护的一些系统资源,应用程序也不能直接进行处理器模式切换。当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理过程中进行处理器模式切换。这种体系结构可以使操作系统控制整个系统资源的使用。  

Cortex-A7处理器寄存器组:

0 1、在寄存器组中,每个方块都是一个寄存器,每个寄存器都是32位的 2、寄存器没有地址,访问寄存器通过编号进行访问,r0-r15,cpsr,spsr(spsr是cpsr的影子寄存器) 3、banked类型的寄存器属于该模式下私有的寄存器,而非banked类型的寄存器属于公有寄存器组 4、user模式和system模式最多可以访问17个寄存器,HYP模式最多可以访问19个寄存器,其他模式可访问18个寄存器 5、cortex-A7寄存器组中一共只有43个寄存器,因此开发中尽量不要定义register类型的变量 6、通用寄存器可分为两类: 0 未分组寄存器,包括R0-R7。 分组寄存器,包括R8-R12。  

栈指针寄存器R13

R13寄存器在ARM处理器中常用为栈指针,称为SP。 每一种异常模式拥有自己的R13。异常处理程序负责初始化自己的R13,使其指向该异常模式专用的栈地址。在异常处理程序入口处,将用到的其他寄存器的值保存在堆栈中,返回时,重新将这些值加载到寄存器。通过这种保护程序现场的方法,异常不会破坏被其中断的程序现场 SP栈指针寄存器存放的是栈指针指向的栈空间的地址。此栈是用来压栈保护现场的,特点是先进后出 满减栈如图所示: 0 代码分析: 给每一个模式都设置对应的栈空间
init_stack:
    ldr        r0,stacktop         /*get stack top pointer,stacktop是一个地址*/

    /********svc mode stack********/
        mov        sp,r0
        sub        r0,#128*4          /*512 byte  for irq mode of stack*/
    /****irq mode stack**/
        msr        cpsr,#0xd2        /*切换至IRQ模式*/
        mov        sp,r0
        sub        r0,#128*4          /*512 byte  for irq mode of stack*/
    /***fiq mode stack***/
        msr     cpsr,#0xd1
        mov        sp,r0
        sub        r0,#0
    /***abort mode stack***/
        msr        cpsr,#0xd7
        mov        sp,r0
        sub        r0,#0
    /***undefine mode stack***/
        msr        cpsr,#0xdb
        mov        sp,r0
        sub        r0,#0
   /*** sys mode and usr mode stack ***/
        msr        cpsr,#0x10
        mov        sp,r0             /*1024 byte  for user mode of stack*/
测试栈:
    /****irq mode stack**/
        msr        cpsr,#0xd2        /*切换至IRQ模式*/
        mov        sp,r0
        sub        r0,#128*4          /*512 byte  for irq mode of stack*/    
                mov             r5, #0x11          /*0x11赋给r5*/
                mov             r6, #0x23          /*0x23赋给r6*/
                stmfd           sp!, {r5, r6}      /*r5,r6入栈*/
                ldmfd           sp!, {r7, r8}      /*出栈值给到r7, r8*/    
监控寄存器的值和栈指针的变化:
寄存器 执行完第四行 执行完第五行 执行完第六行 执行完第七行 执行完第八行
r5 0 0x11 0x11 0x11 0x11
r6 259635441 259635441 0x23 0x23 0x23
r7 1667 1667 1667 1667 0x11
r8 384526877 384526877 384526877 384526877 0x23
sp 0xc200844 0xc200844 0xc200844 0xc20083c 0xc200844
 

连接寄存器R14:

寄存器R14又被称为连接寄存器(Link Register,LR),可以被用作通用寄存器使用。在ARM体系结构中具有下面两种特殊的作用。每一种处理器模式用自己的R14存放当前子程序的返回地址,比如中断异常处理模式。当通过BL或BLX指令调用子程序时,R14被设置为该子程序的返回地址。在子程序返回时,把R14的值复制给程序计数器PC,典型的用法如下: 使用方法一: mov pc,lr bx lr 使用方法二: 在子程序入口处使用下面的指令将PC保存到栈中。 stmfd sp!, {,lr} 在子程序返回时,使用以下相应的配套指令返回: ldmfd sp!, {,pc} 当异常中断发生时,该异常模式特定的物理寄存器R14被设置为该异常模式的返回地址。

 

 

程序计数寄存器R15:

R15又被称为PC程序计数寄存器。PC寄存器中存储的是当前取值的指令的地址,当完成取值操作之后,PC中的值会自动加4指向下一条指令  

程序状态寄存器CPSR:

所有的处理器模式都共用一个 CPSR 物理寄存器,因此 CPSR 可以在任何模式下被访问。CPSR 是当前程序状态寄存器,该寄存器包含了条件标志位、中断禁止位、当前处理器模式标志 等一些状态位以及一些控制位。所有的处理器模式都共用一个 CPSR 必然会导致冲突,为此,除了 User 和 Sys 这两个模式以外,其他 7 个模式每个都配备了一个专用的物理状态寄存器,叫 做 SPSR(备份程序状态寄存器),当特定的异常中断发生时,SPSR 寄存器用来保存当前程序状态寄存器(CPSR)的值,当异常退出以后可以用 SPSR 中保存的值来恢复 CPSR。 因为 User 和 Sys 这两个模式不是异常模式,所以并没有配备 SPSR,因此不能在 User 和Sys 模式下访问 SPSR,会导致不可预知的结果。由于 SPSR 是 CPSR 的备份,因此 SPSR 和CPSR 的寄存器结构相同, CPSR寄存器包含下列内容:
  • ALU(逻辑运算单元)状态标志
  • 当前处理器模式
  • 中断使能标志
  • 设置处理器的状态

 

 

标签:sp,r0,V7,模式,stack,mode,寄存器,架构,ARM
From: https://www.cnblogs.com/lethe1203/p/18077266

相关文章

  • pyCharm oj 习题 列表合并、去重、排序
    列表合并、去重、排序ProblemDescription从键盘输入两个数列,构成两个列表list1、list2,合并这两个列表为list3,将list3去掉重复元素、降序排序后生成list4.InputDescription输入两个数列,以英文逗号分隔OutputDescription输出列表list1、list2、list3、list4SampleInpu......
  • 【机器学习智能硬件开发全解】(五)—— 政安晨:嵌入式系统基本素养【总线、地址、指令集
    在智能硬件领域中,一个核心概念是嵌入式系统,整体结构可以分为以下几个主要组成部分:控制器:控制器是嵌入式系统的核心,负责处理和执行系统中的各种任务和功能。它通常由中央处理器(CPU)和相关的外围设备(如存储器、时钟、中断控制器等)组成。存储器:存储器用于存储系统的程序代码和......
  • Pycharm 中 virtualenv、pipenv、conda 虚拟环境的用法
    文章目录前言虚拟环境的通俗介绍虚拟环境和非虚拟环境该怎么选?通过Virtualenv方式创建虚拟环境通过Pipenv方式创建虚拟环境通过Conda方式创建虚拟环境 前言在网上找了好一些资料,发现介绍Pycharm虚拟环境的不多,查了一些资料,并做个总结。本文主要是介绍Pyc......
  • 【2024.03.12】定时执行专家 V7.2 发布 - TimingExecutor V7.2 Release
    目录▉软件介绍▉新版本V7.2 下载地址▉ V7.2新功能▼2024-03-12 V7.2 -更新日志▉ V7.x 新UI设计▉软件介绍《定时执行专家》是一款制作精良、功能强大、毫秒精度、专业级的定时任务执行软件。软件具有25种【任务类型】、12种【触发器】触发方式,并且......
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的花卉检测与识别系统(附完整资源+PySide6界面+训练代
    摘要:本篇博客介绍了一种基于深度学习的花卉检测与识别系统,并详细展示了其实现代码。系统采取先进的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5等早期版本进行了比较,展示了其在图像、视频、实时视频流及批量文件中识别花卉的高准确度。文章深入阐释了YOLOv8的工作机制,并配备了相应的Pyt......
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的火焰检测系统(Python+PySide6界面+训练代码)
    摘要:本研究详述了一种采用深度学习技术的火焰检测系统,该系统集成了最新的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5等早期算法进行了性能评估对比。该系统能够在各种媒介——包括图像、视频文件、实时视频流及批量文件中——准确地识别火焰目标或着火点等。文章深入阐述了YOLOv8算法......
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的火焰与烟雾检测系统详解(深度学习模型+UI界面升级版
    摘要:本研究详细介绍了一种集成了最新YOLOv8算法的火焰与烟雾检测系统,并与YOLOv7、YOLOv6、YOLOv5等早期算法进行性能评估对比。该系统能够在包括图像、视频文件、实时视频流及批量文件中准确识别火焰与烟雾。文章深入探讨了YOLOv8算法的原理,提供了Python实现代码、训练数据集,以及......
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的番茄成熟度检测系统(Python+PySide6界面+训练代码)
    摘要:开发番茄成熟度检测系统对于提高农业产量和食品加工效率具有重大意义。本篇博客详细介绍了如何利用深度学习构建一个番茄成熟度检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并结合了YOLOv7、YOLOv6、YOLOv5的对比,展示了不同模型间的性能指标如mAP、F1Score等......
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的癌症图像检测系统(深度学习模型+UI界面代码+训练数
    摘要:本文介绍了一种基于深度学习的癌症图像检测系统的代码,采用最先进的YOLOv8算法并对比YOLOv7、YOLOv6、YOLOv5等算法的结果,能够准确识别图像、视频、实时视频流以及批量文件中的摘要:本篇博客深入介绍了如何借助深度学习技术开发癌症图像检测系统,以提高医疗诊断的精度和速度。系......
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的车型识别与计数系统(深度学习模型+UI界面代码+训练
    摘要:开发车型识别与计数系统对于提高交通管理效率和城市规划具有重要意义。本篇博客详细介绍了如何利用深度学习构建一个车型识别与计数系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并结合了YOLOv7、YOLOv6、YOLOv5的对比,给出了不同模型之间的性能指标如mAP、F1Score......