• ARM体系结构与编程-第一章


    1. ARM概述与基本编程模型

    1.4 ARM处理器模式

    • 用户模式(User, usr)

    • 快速中断模式(FIQ, fig)

    • 外部中断模式(IRQ, irq)

    • 特权模式(Supervisor, sve)

    • 数据访问中止模式(Abort, abt)

    • 未定义指令中止模式(Undefined, und)

    • 系统模式(System, sys)

    用户模式外的其他6种处理器模式称为特权模式。这其中,除系统模式外,其他5种模式外,其他5种特权模式称为异常模式。

    1.5 ARM寄存器

    ARM处理器共有37个寄存器,包括:

    • 31个通用寄存器,包括程序计数器(PC)在内。都是32位

    • 6个状态寄存器。32位,只是用其中12位

    ARM处理器共有7种不同的处理器模式,每种模式有一组相应的寄存器组。

    任意时刻,可见的寄存器包括15个通用寄存器(R0~R14)、一个或两个状态寄存器及程序计数器(PC)。

    1.5.1 通用寄存器

    分为3类:

    • 未备份寄存器,包括R0~R7

    • 备份寄存器,包括R8~R14

    • 程序计数器PC,即R15

    1.5.2 程序状态寄存器

    CPSR(当前程序状态寄存器):可以在任何处理器模式下被访问,包含条件标志位、中断禁止位,当前处理器模式标志以及其他的一些控制和状态位。

    SPSR(备份程序状态寄存器):当特定的异常中断发生时,这个寄存器用来存放当前寄存器的内容。在异常中断程序退出时,可以用SPSR中保存到值恢复CPSR。

    由于用户模式和系统模式不是异常中断模式,所以他们没有SPSR。当在用户模式和系统模式访问SPSR,将会产生不可预知的结果

    31 30 29 28 27 26 7 6 5 4 3 2 1 0
    N Z C V Q DNM(RAZ) I F T M4 M3 M2 M1 M0

    N:=1表示负数

    Z:=1结果为0

    C:上下溢出

    V:符号位溢出

    I、F、T及M[4:0]:控制位,I、F为中断禁止位,IRQ、FIQ。T说明本指令是ARM指令(0)还是Thumb指令(1)。M控制处理器模式。

    1.6 ARM体系的异常中断

    执行流程的控制:

    • 顺序执行

    • 跳转指令

    • 中断发生

    1.6.1 ARM中异常中断种类

    异常中断名称 含义
    复位(Reset) 当处理器复位引脚有效,产生复位中断,程序跳转到复位异常中断处理程序处执行。系统加电、系统复位、跳转到复位中断向量处执行(软复位)
    未定义的指令(undefine instruction) 处理器或协处理器认为当前指令未定义
    软件中断(SWI) 用户模式下的程序调用特权操作指令
    指令预取中止(prefech abort) 预取的指令的地址不存在
    数据访问中止(Data Abort) 数据访问指令的目标地址不存在
    外部中断请求(IRQ) 处理器的外部中断请求引脚有效
    快速中断请求(FIQ) 处理器的外部快速中断请求引脚有效

    1.6.2 ARM处理器对异常中断的响应过程

    • 保存处理器当前状态、中断屏蔽位以及条件标志位

    • 设置当前程序状态寄存器CPSR中相应的位

    • 将寄存器lr_mode设置成返回地址

    • 将程序计数器值(PC),设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序执行处执行。

    R14_ = return link ;设置返回地址
    SPSR_ = CPSR  ;保存状态寄存器
    CPSR[4:0] = exception mode number  ;设置执行模式
    CPSR[5] = 0  ;运行于ARM模式
    if  == Reset or FIQ then
    CPSR[6] = 1  ;禁止新的FIQ中断
    CPSR[7] = 1  ;禁止IRQ中断
    PC = exception vector address
    

    1.6.3 从异常中断处理程序中返回

    • 恢复被中断的程序的处理器状态,即将SPSR_mode寄存器内容复制到CPSR中

    • 返回到发生异常中断的指令的下一条指令处执行,即将lr_mode寄存器的内容复制到程序计数器PC中。

    复位异常中断处理程序不需要返回,在复位异常中断处理程序开始整个用户程序的执行,因而它不需要返回

    1.7 ARM体系中的存储系统

    1.7.1 ARM体系中的存储空间

    1.7.2 ARM存储器的格式

    • big-endian

    • little-endian

    1.7.3 非对齐的存储访问操作

    • 非对齐的指令预取操作

      指令的执行结果不可预知,要么地址值中最低位被忽略

    • 非对齐的数据访问操作

      对于Load/Store操作:

    1. 执行结果不可预知

    2. 忽略字单元地址的低两位的值;忽略半字单元地址的最低位的值

    3. 忽略字单元地址值中的低两位的值;忽略半字单元地址的最低位的值

    指令预取和自修改代码

  • 相关阅读:
    iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码
    微信之:after和:before的作用及使用方法
    vue项目查看vue版本及cli版本及版本升级
    Mac下安装,升级Node、npm
    ESLint在Vue中的使用详解
    MAC下vue的安装
    Flutter 插件的创建及使用
    怎么查询对方qq的ip地址 如何通过qq查看对方ip
    iOS-weak修饰的对象被释放时,weak指针自动被置为nil的实现原理
    Could not get unknown property 'versions' for object of type com.android.build.gradle.AppExtension
  • 原文地址:https://www.cnblogs.com/luoxiao23/p/11095032.html
Copyright © 2020-2023  润新知