您现在的位置是:首页 >技术教程 >总线与地址以及ARM的寄存器网站首页技术教程

总线与地址以及ARM的寄存器

fantasy_arch 2024-09-23 00:01:04
简介总线与地址以及ARM的寄存器

 2.8.1 地址的本质

    地址到底是什么?在一个计算机系统中,计算机是如何给内存RAM,外部设备控制器的寄存器分配地址的?在搞清楚这个问题之前,我们需要先把地址的概念搞清楚。学过数字电路的同学应该记得译码器这样一种组合逻辑电路器件;一组输入信号,通过译码转换,会选中一个输出信号,输出信号可以是高电平,低电平。甚至是 一个脉冲,计算机的内存简单点理解,其实就是将一系列存储单元和译码器组装在一起,内存中包含很多存储单元,为了方便管理,我们需要将这些存储单元进行编号管理,每一个存储单元对应一个编号。当CPU想访问其中一个存储单元时,可以通过CPU管脚发出一组信号,经过译码器译码,选中与这个信号对应的存储单元,然后就可以直接读写这块内存了,CPU管脚发出的这组信号,也就是存储单元对应的编号。

ARM体系结构与汇编语言

3.1 ARM体系结构

   计算机的指令集一般可以分为4种,复杂指令集(CISC),精简指令集,显式并行指令集和超长指令字指令集VLIW。我们在嵌入式学习和工作中需要经常打交道的是RISC指令集,RISC指令集相对于CISC指令集,主要有以下特点。

1 Load Store 架构,CPU不能直接处理内存中的数据,需要先将内存中的数据Load到寄存器中才能操作,然后将处理结果Store刀内存中。

2 固定的指令长度,单周期指令

3 倾向于使用更多的寄存器来存储数据,而不是使用内存中的堆栈,效率更高。

4 ARM指令虽然属于RISC,但是和原汁原味RISC相比,还是有一定的差异的,具体如下。

5 并不是所有的ARM指令都是单周期的。

6 ARM有16位的thumb指令集,是32位ARM指令集的压缩形式,提高了代码密度。

7 条件执行,通过指令组合,减少了分支指令数目,提高了代码密度。

8 增加了DSP,SIMD/neon 等指令。

ARM处理器有多种工作模式,应用程序正常运行时,ARM处理器就会切换到对应的特权工作模式,用户模式属于普通模式,有些特权指令是运行不了的。需要切换到特权模式下才能运行,在ARM处理器中,除了用户模式是普通模式,剩下的几种工作模式都属于特权模式。

ARM处理器的不同工作模式

处理器模式

模式介绍

User Mode

应用程序正常运行的模式

FIQ Mode

快速中断模式,中断优先级比IRQ高

IRQ Mode

中断模式

Supervisor Mode

管理模式,保护模式

Abort Mode

数据异常,指令读取失败进入该模式

Undefined Mode

CPU遇到未识别,未定义的指令会进入这个模式

System Mode

类似用户模式

Monitor Mode

安全扩展

在ARM处理器内部,除了基本的算数运算单元,逻辑运算单元,浮点运算单元和控制单元,还有一系列寄存器,包括各种通用寄存器,状态寄存器,控制寄存器。用来控制处理的运行,保存程序运行时各种状态和临时结果。

System/User Mode

FIQ

Supervisor

Abort

IRQ

Undefined

R0

R0

R0

R0

R0

R0

R1

R1

R1

R1

R1

R1

R2

R2

R2

R2

R2

R2

R3

R3

R3

R3

R3

R3

R4

R4

R4

R4

R4

R4

R5

R5

R5

R5

R5

R5

R6

R6

R6

R6

R6

R6

R7

R7

R7

R7

R7

R7

R8

R8 fiq

R8

R8

R8

R8

R9

R9  fiq

R9

R9

R9

R9

R10

R10  fiq

R10

R10

R10

R10

R11

R11  fiq

R11

R11

R11

R11

R12

R12  fiq

R12

R12

R12

R12

R13

R13  fiq

R13 svc

R13 abt

R13

R13

R14

R14  fiq

R14 svc

R14 abt

R14

R14

R15(PC)

R15(PC)

R15(PC)

R15(PC)

R15(PC)

R15(PC)

ARM处理器中的寄存器可以分为通用寄存器和专用寄存器两种,寄存器R0 ~ R12属于通用寄存器,除了FIQ工作模式,在其他工作模式下这些寄存器都是公用,共享的,R0~R3通常用来传递函数参数,R4~R11用来保存程序运算的中间结果或者函数的局部变量等,R12常用来作为函数调用过程中的临时寄存器,ARM处理器有多种工作模式,除了这些在各个模式下通用的寄存器,还有一些寄存器在各自的工作模式下是独立存在的,如R13,R14,R15 CPSP,SPSR寄存器,在每个工作模式下都有自己单独的寄存器,R13寄存器又称为堆栈指针寄存器,用来维护和管理函数调用过程中的栈帧变化,R13总是指向当前正在运行的函数的栈帧,一般不能用做其它用途。R14寄存器称为链接寄存器,LR。在函数调用过程中主要用来保存上一级函数调用者的返回地址,寄存器R15又称为程序计数器PC,CPU从内存取出来指令,就是默认从PC保存的地址中取的,每取一次指令,PC寄存器的地址值自动的增加,CPU一条一条不停的取指令。程序也就一直运行下去,在ARM三级流水线种,PC指针的值等于当前正在运行的指令地址,后续的32位处理器虽然流水线的级数不断增加,但是为了简化编程,PC指针的值继续延续了这种计算方式。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。