ARM体系结构与编程学习笔记1

第一章 ARM概述与其基本编程模型

一、ARM数据类型
1、字(Word):在ARM体系结构中,字的长度为32位。

2、半字(Half-Word):在ARM体系结构中,半字的长度为16位。

3、字节(Byte):在ARM体系结构中,字节的长度为8位。
二、ARM处理器存储格式
ARM体系结构将存储器看作是从0地址开始的字节的线性组合。作为32位的微处理器,ARM体系结构所支持的最大寻址空间为4GB。

ARM体系结构可以用两种方法存储字数据,分别为大端模式和小端模式。

大端模式(高地高低):字的高字节存储在低地址字节单元中,字的低字节存储在高地址字节单元中。

小端模式(高高低低):字的高字节存储在高地址字节单元中,字的低字节存储在低地址字节单元中。

三、ARM处理器工作状态
从编程的角度来看,ARM微处理器的工作状态一般ARM和Thumb有两种,并可在两种状态之间切换。

1、ARM状态:此时处理器执行32位的字对齐ARM指令,绝大部分工作在此状态。

1.4 ARM处理器模式
ARM有7种运行模式
1:用户模式 : 正常程序执行的模式
2:快速中断模式 : 用于告诉数据传输和通道处理
3:外部中断模式 : 用于通常的中断处理
4:特权模式 : 供操作系统使用的一种保护模式
5:数据访问中止模式 :用于虚拟存储和存储保护
6:未定义指令中止模式 :用于支持通过软件方针硬件的协处理器
7:系统模式 :用于运行特权级的操作系统任务
除了用户模式,其他模式都称之位特权模式
特权模式中,程序可以任意进行处理器模式的切换。
除了系统模式,其他5种特权模式称之位异常模式。
大部分应用程序在用户模式下,所以不能访问一些受操作系统保护的系统资源。
当应用程序在发生异常中断后,处理器进入相应异常模式,才可以进行模式的切换。

1.5 ARM寄存器介绍
ARM处理器共有37个寄存器。其中包括:
1:31个通用寄存器,包括程序计数器(PC),这些寄存器都是32位的
2:6个状态寄存器,这些寄存器都是32位寄存器,目前只使用其中12位(截止写书的时候吧)。
3:上述的每一种处理器模式都有一组相应的寄存器组。

五、ARM处理器寄存器组织
ARM共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器,包括R0-R15,R8_fiq-R14_fiq,R13_svc,R14_svc,R13_abt,R14_abt,R13_irq,R14_irq,R13_und,R14_und,CPSR,SPSR_fiq,SPSR_svc,SPSR_abt,SPSR_irq,SPSR_und。如图。
在这里插入图片描述

1、未分组寄存器R0-R7

在所有运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途。因此在中断或异常处理进行异常模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,所以可能造成寄存器中数据的破坏。

2、分组寄存器R8-R14

对于分组寄存器,他们每次所访问的物理寄存器都与当前的处理器运行模式相关。具体如上图。

R13常用作存放堆栈指针,用户也可以使用其他寄存器存放堆栈指针,但在Thumb指令集下,某些指令强制要求使用R13存放堆栈指针。

R14称为链接寄存器(LR,Link Register),当执行子程序时,R14可得到R15(PC)的备份,执行完子程序后,又将R14的值复制回PC,即使用R14保存返回地址。

3、程序计数器PC(R15)

寄存器R15用作程序计数器(PC),在ARM状态下,位[1:0]为0,位[31:2]用于保存PC;在Thumb状态下,位[0]为0,位[31:1]用于保存PC。
由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节正确读取PC值时,该值位当前指令加8字节,也可能时12字节,取决与芯片的计数方式。当时无论如何,不能有些指令采用地址+8,一些指令采用指令+12,要么只加8,要么只加12.
4、程序状态寄存器CPSR和SPSR
CPSR(Current Program Status Register,当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位以及其他一些相关的控制和状态位。

每一种运行模式下都有一个专用的物理状态寄存器,称为SPSR(Saved Program Status Register,备份的程序状态寄存器),当异常发生时,SPSR用于保存当前CPSR的值,从异常退出时则可由SPSR来恢复CPSR。

由于用户模式和系统模式不属于异常模式,这两种状态下没有SPSR,因此在这两种状态下访问SPSR,结果是未知的。
在这里插入图片描述
1 N:两个补码表示的有符号整数运算时,N=1表示运算的结果为负数,
N=0,表示结果为正数或者0;
2: Z: Z=1 表示运算结果为0;
Z=0 表示运算结果不为0;
3: C :4种情况讨论C的设置方法:
加法指令 : C=1,表示无符号数运算溢出 ,其他 C=0
减法指令: 运算发生借位C=0,其他情况C=1
4:V 对于加法/剑法运算指令。当操作数与运算结果为二进制补码表示符号数时,V=1表示符号溢出。
通常其他的指令不影响V位
5 : I I=1 表示禁止IRQ中断
6: F F=1时禁止FIQ中断
7:T T=0表示ARM指令 T=1表示 Thumb指令
8 :M控制位
在这里插入图片描述

1.6 ARM体系的异常中断
ARM体系下的三种控制程序执行的流程
1:正常流程: 1:执行一条ARM指令,程序计数器寄存器(PC)的值加4个字节,执行一条Thumb指令,程序计数器加两个字节,整个过程都是按顺序执行
2:通过跳转指令,可以跳到指定的地址标号处执行,
B:指令用于执行跳转操作
BL:指令在执行跳转操作的同时,保存子程序的返回地址
BX:指令在执行跳转操作的同时,根据目标地址的最低位可以将程序状态切换到Thumb状态
BLX:指令执行3个操作,跳转到目标地址处执行,保存子程序返回地址,根据目标地址的最低为可以将程序状态切换成Thumb状态。
3:异常的中断发生的时候,系统执行完成当年的指令后,将跳转到相应的异常中断处理程序执行。在当异常中断处理程序执行完成后,程序返回发生中断的指令下一条指令出执行。进入异常终端前一定要保存被中断的程序的执行现场。
1.6.3 从异常中断处理程序返回
1:从异常中断处理程序中返回包括一下两种基本操作:
1:恢复被中断程序的处理器状态,即将SRSR_MODE寄存器复制到CPSR
返回到异常中断的指令下一条指令处执行,即将Ir_mode寄存器的内容复制到程序计数器PC中

猜你喜欢

转载自blog.csdn.net/qq_35989861/article/details/84167783
今日推荐