ARM体系结构1:计算机组成以及ARM编程模型

发布于:2022-08-08 ⋅ 阅读:(348) ⋅ 点赞:(0)

正式开始学习arm之前让我们先来了解一些预备知识这将对我们之后学习arm有较大的帮助。

半导体器件

半导体器件的开关特性

逻辑0和1:数字电子电路中用0来表示低电平,用1来表示高电平。通过半导体开关的导通和截止的两种工作状态来得到高电平和低电平。

1.二极管

2.三极管

3.mos管

 与,或,非运算和与,或,非门

与运算和与门电路

或运算和或门电路 

 

 非运算和非门电路

非门电路也叫做反相器

 

 计算机系统的组成

计算机系统主要由硬件和软件组成,硬件部分又包括输入设备(如键盘鼠标扫描仪),输出设备(如显示器,打印机,绘图仪等),控制器,存储器(存放程序和数据),运算器,总线结构组成,软件主要由系统软件和应用软件组成。

三级存储系统

 三级存储系统中,辅助存储器表示外存例如硬盘U盘等,而主存储器为内存块,cache则是高速缓存器,这里补充讲解一个知识点,在多进程的任务切换中需要刷新高速缓存器和TLB页表(存放进程号等),而多线程切换则不需要额外的刷新高速缓存器和TLB,因为他们在一个进程中,所以多线程的任务切换效率高于多进程。

 当cpu需要从内存中读取数据时,由于内存相较cpu为低速设备所以可能导致阻塞,所以一般我们会由高速缓存器将需要读取的数据读取完毕后,再由cpu进行访问,这样这个期间cpu可以执行其他的程序指令。

cache:cpu可以直接访问,用来存放当前正在执行的活跃的程序和数据,方便cpu访问。

主存储器:cpu可以直接访问,用来存放当前正在执行的程序和数据

辅助存储器:主机外部,不能直接被cpu访问,用来存放暂时不需要运行的程序和数据。

二级存储系统比三级少了一个辅助存储器。

运算器

运算器是对信息进行处理和运算的部件,经常进行算术运算和逻辑运算,因此运算器的核心是ALU算术逻辑运算部件。运算器中也有若干个寄存器。

 控制器

控制器是计算机的指挥中心,主要包括一些时序控制信号形成部件和一些专用的寄存器

 总线结构

总线将计算机各大基本部件按某种方式连接起来构成了计算机系统。它是一组能为多个部件服务的公共信息传送线路,能分时的发送和接收各部件的信息。又分为单总线和多总线结构。

单总线:

 多总线:

ARM编程模型

数据和指令类型

ARM采用的是32位架构

1.byte:8bits

2.Holfword:1bits

3.word:32bits

4.doubleword:64bits

大部分ARM core提供

1.ARM指令集(32bits)

2.Thumb指令集(16bits)

ARM系统硬件组成和运行原理

 1.取地:flash里的内容通过总线将指令传到内存中,cpu通过控制器将内存的指令通过总线依次放入到寄存器中

2.译码:解析寄存器的指令

3.执行:控制器通过解析出来的指令控制运算器进行运算,并将结果放入寄存器中。

ARM的8个基本工作模式

user模式 非特权模式,大部分任务执行在这种模式
FIQ模式 高优先级中断模式
IRQ模式 低优先级中断模式
supervisor(svc) 复位或软中断指令执行时会进入这种模式
Abort 存取异常会进入这种模式(比如数组越界处理)
undef 执行未定义指令会进该模式
system 使用和user模式相同寄存器集的特权模式
monitor cortex-A特有的特权模式

 ARM寄存器

 每种模式都有其独有的寄存器,如下图所示,其中和黑色不同颜色的表示各个模式特殊的寄存器,其余都是通用寄存器,其中user模式下可用寄存器是最少的

 这里介绍三个特殊的寄存器

r13寄存器:sp栈顶指针寄存器

r14寄存器:lr连接寄存器(保存下一个指令的寄存器)

r15寄存器:pc程序执行寄存器(保存当前正在取址的指令的地址!!!)如果在keil调试中单步执行程序你会发现每次pc寄存器的值都是当前执行指令的地址。

状态寄存器cpsr

条件位:(在运算指令中有很大的作用)

N:本位设置成当前指令运行结果的bit[31]的值,当两个由补码表示的有符号整数运算时,N=1表示运算的结果为负数,N=0表示结果为正数或者0;

Z:Z=1表示运算的结果为0,Z=0表示运算的结果不为0;

C:C需要分四种情况来进行讨论

1.在加法指令中,包括比较指令CMN,当结果产生了进位,则C=1,表示无符号数运算发生上溢出,其他情况下C=0;

2.减法指令中,包括比较指令CMP,当运算中发生了错位(即无符号数运算发生下溢出),则C=0,其他情况C=1;

3.对于在操作数中包含移位操作的运算指令(非加/减法指令),C被设置成被移位寄存器最后移出去的位。

4.对于其他非加减法运算指令,C的值通常不受影响

V:

1.对于加减法指令。当操作数和运算结果都是以二进制的补码表示的带符号的数时,且运算结果超出了具有符号运算的范围是溢出,V=1表示符号位溢出

2.对于非加减法指令,通常不改变标志位V的值;

本文含有隐藏内容,请 开通VIP 后查看