嵌入式期末复习--day2(第二章 ARM体系结构)

目录

一、知识点总结

(一)ARM7和ARM9采用的流水线

1、ARM7采用的3级流水线

2、ARM9采用的5级流水线

(二)ARM9的7种工作模式和2种工作状态

1、7种工作模式

(1)用户模式(usr)

(2)快速中断模式(fiq)

(3)外部中断模式(irq)

(4)管理模式(svc)

(5)指令/数据访问终止模式(abt)

(6)系统模式(sys)

(7)未定义指令中止模式(und)

2、2种工作状态

(1)ARM状态

(2)Thumb状态

(三)大端和小端存储格式

(四)I/O端口的访问方式

1、存储映射方式

2、I/O映射方式(独立编址)

(五)ARM9的37个32位内部寄存器

1、通用寄存器

2、状态寄存器

(1)条件码标志

(2)控制位

(3)保留位

(六)ARM9异常

1、异常和中断的区别

2、异常的类型及向量地址

(1)复位异常

(2)未定义指令异常

(3)软件中断异常(SWI)

(4)指令预取中止异常

(5)数据中止异常

(6)IRQ(中断请求)

(7)FIQ(快速中断请求)

3、异常的优先级

二、课后习题

2、简述ARM9处理器有哪些寄存器?它们中哪个用作PC?哪个用作LR?

3、什么是异常?ARM9支持哪些异常?说明各异常的向量地址。

4、简述大端存储模式和小端存储模式的含义。

5、说明CPSR寄存器及其各位的作用。

6、ARM9支持哪些工作模式?不同工作模式下的CPSR寄存器的模式位如何确定?

7、为什么说ARM9异常是快速中断?ARM9处理器主要从哪些方面确保FIQ异常响应的快速性?


一、知识点总结

(一)ARM7和ARM9采用的流水线

1、ARM7采用的3级流水线

(1)3级流水线:

(2)流水线的形式如下:

2、ARM9采用的5级流水线

(1)5级流水线

(2)5个阶段的任务解释:

取指:从存储器中取出指令,然后将其放入指令流水线
译码:对指令进行翻译
执行:执行运算ALU
访存(缓冲/数据):如果需要,则访问数据存储器;如果不需要,则等待一个时钟周期(缓冲)。
回写:将指令产生的结果回写到寄存器。这里应该可以理解为如果是访问了数据存储器,那么将获取的数据回写;如果没有访问,那么应该回写的就是执行这个阶段的结果。(个人理解,如有错误请指正

        无论是ARM7还是ARM9,PC指向的均为取值这个阶段;

计算公式为PC=当前执行指令地址+8

对于后面会提到的Thumb状态下:PC=当前执行指令地址+4

(二)ARM9的7种工作模式和2种工作状态

1、7种工作模式

分别为用户模式、快速中断模式、外部中断模式、管理模式、指令/数据访问终止模式、系统模式、未定义指令中止模式。

(1)用户模式(usr)

        ARM处理器正常执行程序状态下的模式

(2)快速中断模式(fiq)

        高速数据传输或通道处理

(3)外部中断模式(irq)

        通用的中断处理

(4)管理模式(svc)

        操作系统的保护模式,如系统上电复位或软件中断指令执行进入该模式

(5)指令/数据访问终止模式(abt)

        当指令或数据预取终止的时候进入该模式,用于虚拟存储及存储保护

(6)系统模式(sys)

        运行具有特权的操作系统任务时的模式

(7)未定义指令中止模式(und)

        当未定义的指令执行的时候进入该模式,可用于支持硬件协处理器的软件仿真。

注意:除了用户模式,其余的模式均为特权模式。

除用户模式和系统模式以外,其余的5种又称异常模式。

2、2种工作状态

首先,需要清楚字对齐和半字对齐。

字对齐:存储的地址相邻且可以被4整除,即最后两位是00。
半字对齐:存储的地址相邻且可以被2整除,即最后一位是0。

(1)ARM状态

        在该状态下,处理器核执行32位的、字对齐的ARM指令。

(2)Thumb状态

        在该状态下,处理器核执行16位的、半字对齐的Thumb指令(T指令)。

注意:在程序执行的过程中,两种状态可以切换,但不影响工作模式和寄存器中的内容。

(三)大端和小端存储格式

ARM9采用的是32位长度地址,存储器的地址空间可以看作是从0地址开始的字节的线性组合,即一个地址对应一个存储字节。

关于一个字是多少个字节的说法:

在16位的系统中:1字 (word)= 2字节(byte)= 16(bit)

在32位的系统中: 1字(word)= 4字节(byte)=32(bit)

在64位的系统中:1字(word)= 8字节(byte)=64(bit)

 上面的这些大概就说了,ARM9中一个字为32位,其余的我也不太能理解,这里我觉得能清楚大端和小端是怎么区分的就可。

简单的来说,可以用“大异小同”来记忆,我们平时说的都是大同小异,这里反过来就好了。那么是什么意思呢?

大异:就是说对于大端模式,遵循“高位低地址”的规律,即数据的最高字节存储在最低地址当中。

      例如:数字0x1234,将每两位放入一个地址中,地址从0x30000000开始。 

对于数据:从右至左位数增大(这里可以拿十进制数来理解,123,个位为3,十位为2,百位为1),所以这里的十六进制也同理。

那么这里的34为低位,12为高位;

对于地址来说是从0x30000000依次增大,所以就应该将12放在0x30000000地址中,将34放在下一个单元。

小同:就是在小端模式下,遵循“高位高地址”,即数据的最高字节存储在最高地址当中。对于上面的例子,存储结果如下:

(四)I/O端口的访问方式

1、存储映射方式

        就是端口地址和存储器统一编址。这种方式的编址可以理解为教学楼中的教室和厕所的编号是统一的,例如A102是厕所,它隔壁的教室编号为A103,即它俩为统一的编号方式。

优点:因为是统一编址,所以对I/O端口设备可以进行像对存储器的一些操作,比如:访问就按照访问存储器的方式,实现输入/出操作,逻辑运算等;除此之外,还可以增大I/O端口编址空间。

缺点:存储器的容量减小。

2、I/O映射方式(独立编址)

        I/O端口地址与存储器分开独立编址。比如说教工号和学生学号,就是分开编号的。

优点:对于I/O操作和存储器操作层次清晰,程序可读性强。

缺点:指令少,编程相对灵活性减少;硬件上需要 I/O 端口的译码芯片,增加了硬件开支

(五)ARM9的37个32位内部寄存器

内部寄存器可分为通用寄存器和状态寄存器

通用寄存器可以用来存放数据或地址,有31个是通用寄存器;

状态寄存器标识或设置通用寄存器的工作模式或者工作状态等,有6个状态寄存器,每个寄存器用其中的12位。

下面对于内部寄存器进行说明,这里按照是否是异常模式分,用户模式和系统模式属于非异常模式,所以使用的是同一组寄存器(个人理解),其他的几种异常模式有各自的寄存器组,所以这里一共分为6组。

1、通用寄存器

        对于R0~R7(未分组寄存器)和R15(PC),7种模式共用一套,所以有9个共用的寄存器;

        对于R8~R12,快速中断模式有一套特有的,用来保证“快速”,而其他模式下共用一套,所以一共有10个寄存器;

        对于R13(SP)和R14(LR),6组下均有各自的寄存器,所以一共有12个寄存器。

由上面的解释可得到,通用寄存器有9+10+12=31个。

其中:

        R13用作堆栈指针,又称SP(实质上是存储器+先进后出(LIFO):R13是一个寄存器,但它的值通常指向内存中的堆栈区域。这种特定用途决定了它在实际应用中更多地与堆栈操作关联,而堆栈又是一种典型的LIFO结构,因此R13在实际运作中体现出“存储器+先进后出”的特性。个人理解);

        R14用作子程序链接存储器,又称LR。有两种功能:一是保存子程序的返回地址,二是当异常发生时,该异常模式下的那个R14被设置成异常返回地址。

        R15用于程序计数器(PC),用于控制程序中指令的执行顺序,总是指向下一条执行指令。

2、状态寄存器

        可分为当前程序状态寄存器和备份程序状态寄存器。

        当前程序状态寄存器只有1个,即为CPSR,各工作模式共用;

        用户模式和系统模式下没有备份程序状态寄存器,其余的5个工作模式各有一个,所以有5个备份程序状态寄存器。

由上面的分析可得,状态寄存器有1+5=6个。

状态寄存器用于保存程序运行的当前状态,程序状态寄存器的0~7位为控制位;8~27为保留位;28~31为条件码标志。

(1)条件码标志

        即为CPSR的高4位,分别为N、Z、C、V。

N:当用2个补码表示的带符号位进行运算时,N=1表示运算结果是负数,N=0则表示结果是正数或零。

Z:Z=1表示运算结果为零,Z=0则表示非零。

C:进位借位标志位。

        对于加法运算(包括比较指令CMP),如果产生了进位(且均无符号溢出),C=1,否则C=0;

        对于减法运算(包括比较指令CMP),产生借位(且均无符号溢出),C=0,否则C=1;

        对于包含移位操作的非加/减运算指令,C为移出值的最后一位。

        对于其他的非加/减运算指令,C通常不变。

V:溢出标志位。

        对于加/减运算指令,当操作数和运算结果为二进制补码表示的带符号数时,V=1表示符号位溢出。

        对于其他的非加/减运算指令,V的值通常不改变。

(2)控制位

        即为CPSR的低8位,分别为I、F、T和M[4:0]。

中断禁止位:I和F,分别用来禁止和允许IRQ和FIQ两类中断。=1,表示禁止该中断;=0表示允许该中断。

T标志位:用来设置处理的工作状态。T=1表示Thumb状态;T=0表示 ARM状态。

工作模式位:M[4:0],即一共有5位,本来可以有32个数,但是一共有7个工作模式,所以在这32个书中选择了7个作为与7个模式对应的数(为方便记忆可以记为16~19,23,27,31),对应表格如下所示:

CPSR寄存器的工作模式位
M[4:0]模式
10000用户模式(usr)
10001快速中断模式(FIQ)
10010外部中断模式(IRQ)
10011管理模式(SVC)
10111中止模式(abt),即指令/数据访问终止模式
11011未定义模式(und)
11111系统模式(sys)
(3)保留位

        当改变(1)和(2)时,保留位不需要改变,主要用于ARM版本的扩展。

上面说明的是ARM9的内部寄存器,而Thumb的内部寄存器一共有27个,状态寄存器和ARM9的一样6个,R0~R7、PC共用,堆栈指针和链接寄存器(分别对应ARM状态的R13和R14)在6组下均有各自对应的寄存器。所以一共有6+8+1+2*6=27个。

(六)ARM9异常

1、异常和中断的区别

  • **异常(Exception)**是由CPU内部在执行指令期间检测到的错误或特殊条件引发,主要用于处理程序运行中的问题,即异常由CPU本身原因引起
  • **中断(Interrupt)**是由外部设备或硬件引发,用于响应硬件请求,通常与I/O操作相关,即中断由外因引起

还想更深入的了解,可以参考这篇文章(侵权联系删除):

面试考点——中断和异常的区别-CSDN博客

2、异常的类型及向量地址

异常有7种异常。当异常发生之后,处理器的PC值被强制赋予该异常下的存储器地址,处理器便从该地址开始运行程序,这些存储器地址成为异常向量,简称向量。

ARM9的异常处理模式
异常名称对应模式正常向量高地址向量
复位管理(SVC)0x000000000xFFFF0000
未定义指令未定义(und)0x000000040xFFFF0004
软件中断(SWI)管理(SVC)0x000000080xFFFF0008
指令预取中止(取指令存储器中止)中止(abt)0x0000000C0xFFFF000C
数据中止中止(abt)0x000000100xFFFF0010
IRQ(中断)IRQ0x000000180xFFFF0018
FIQ(快速中断)FIQ0x0000001C0xFFFF001C

高地址向量(高端向量,由Implementation Defined决定系统是否支持高端向量)

        处理器在进入异常处理程序之前,会将断点处相应异常的PC和CPSR分别保存在R14和SPSR中,当结束异常处理返回之后,就重新赋值回去。

下面对于每一种异常简单解释一下:

(1)复位异常

        在系统上电或按下复位键且处理器收到复位信号后,产生复位异常,中断执行当前指令,并在禁止中断的管理模式下,从地址0x00000000或0xFFFF0000开始执行。

(2)未定义指令异常

出现该异常,有两种情况:

        一是协处理器没有响应;利用未定义的指令异常,可以在没有设计硬件协处理器的系统上,对协处理器的功能进行软件仿真。

        二是试图执行未定义的指令。

(3)软件中断异常(SWI)

        在执行软件中断指令(SWI)的时候可能出现的异常,可使用该异常机制实现系统功能调用。

(4)指令预取中止异常

        在指令预取访问存储器失败时产生指令预取中止异常,此时,存储器系统发出存储器中止信号,相应取值激活的中止,预取的指令标为无效。

        若处理器尝试处理无效的指令,则发生指令预取中止异常。

(5)数据中止异常

        与指令预取中止异常的产生类似,只不过是访问数据存储器失败时产生,而标记无效的为数据。

(6)IRQ(中断请求)

        是nIRQ引脚的外部中断信号引起的。当ARM9处理器的nIRQ引脚上施加一个有效信号(中断信号)时,会发生该异常。

        CPSR的I位为1,禁止;0允许;

(7)FIQ(快速中断请求)

        外部中断信号引起的。当外部部件在ARM9处理器的nFIQ引脚施加有效信号,将产生FIQ异常。

         CPSR的F位为1禁止;0允许;

3、异常的优先级

优先级异常
1(最高)复位
2数据中止
3快速中断(FIQ)
4外部中断(IRQ)
5指令预取中止
6(最低)未定义指令、SWI

二、课后习题

2、简述ARM9处理器有哪些寄存器?它们中哪个用作PC?哪个用作LR?

       ARM9处理器有31个通用寄存器和6个状态寄存器。其中,用户模式和系统模式共用一套寄存器,所以一共分为6组寄存器。其中,通用寄存器中6组共用的有R0~R7,R15;快速中断模式特有一套R8~R12的寄存器,其他5组共用一套R8~R12的寄存器;对于R13和R14,6组均有自己的寄存器。对于状态寄存器,6组共用一个CPSR寄存器,用户模式与系统模式没有备用程序状态寄存器,其他的5组均有自己的备份寄存器。

        用作PC的是R15,用作LR的是R14。

3、什么是异常?ARM9支持哪些异常?说明各异常的向量地址。

        异常就是由于外部或内部的原因,暂时停止执行当前程序,转去处理特定的事件,处理完毕之后返回原来的程序继续执行。只要是正常的程序流程被暂停,则异常发生。

        ARM9支持的异常有七种,如下表所示:

异常正常向量高地址向量
复位0x000000000xFFFF0000
未定义指令0x000000040xFFFF0004
软件中断0x000000080xFFFF0008
指令预取中止0x0000000C0xFFFF000C
数据中止0x000000100xFFFF0010
IRQ0x000000180xFFFF0018
FIQ0x0000001C0xFFFF001C

       

4、简述大端存储模式和小端存储模式的含义。

        大端存储模式即为数据的高位存储在低地址当中,数据的低位存储在高地址中;

        小端存储模式即为数据的高位存储在高地址当中,数据的低位存储在低地址中。

5、说明CPSR寄存器及其各位的作用。

        CPSR由条件码标志、控制位和保留位构成。

条件码标志有N、Z、C、V。

N表示2个补码表示的带符号数的结果。N=1表示结果为负数,N=0表示结果为正数或零。

Z=1表示运算结果为零,Z=0表示运算结果为非零。

对于加法若产生进位则C=1,否则为0;对于减法,若产生借位C=0,否则为1;对于包含以移位的非加/减法,C为移出值的最后一位;对于其他的,C不变;

V为溢出标志位。对于加/减运算指令,当操作数和运算结果为二进制补码表示的带符号数时,V=1表示符号位溢出。对于其他非加/减运算,V的值不变。

控制位是低8位。分别为I、F、T和M[4:0]

中断禁止位:I和F,分别表示IRQ和FIQ中断,为1表禁止该中断,为0表示允许。

T控制位是用来转换工作状态的,T=1为Thumb状态,T=0为ARM状态。

M[4:0]则表示工作模式的选择,根据7个不同的数值可以有相应的模式。

其余的为保留位,一般情况下不变。

6、ARM9支持哪些工作模式?不同工作模式下的CPSR寄存器的模式位如何确定?

        ARM9支持7中工作模式,分别为用户模式、外部中断模式、快速中断模式、管理模式、指令/数据预取终止模式、系统模式、未定义模型。不同工作模式下的CPSR寄存器的模式位如下:
 

M[4:0]模式
10000用户模式
10001快速中断模式
10010外部中断模式
10011管理模式
10111中止模式
11011未定义模式
11111系统模式

7、为什么说ARM9异常是快速中断?ARM9处理器主要从哪些方面确保FIQ异常响应的快速性?

        FIQ异常是快速中断,是因为ARM9处理器在处理FIQ异常时会抢占当前正在执行的指令,直接跳转到FIQ异常处理程序,从而能够快速响应该异常。
        ARM9处理器主要从以下几个方面确保FIQ异常响应的快速性:

  1. 专用寄存器集: ARM9处理器提供了专门用于处理FIQ异常的寄存器集。这些寄存器在发生FIQ异常时可以立即被保存和加载,而无需干扰普通程序执行时使用的寄存器。

  2. 优先级别: FIQ异常具有比普通中断更高的优先级,因此在发生FIQ异常时,处理器会立即暂停正在执行的指令,转而执行FIQ异常处理程序。

  • 28
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值