ARM体系结构学习2

发布者:真诚的友谊最新更新时间:2016-04-08 来源: eefocus关键字:ARM  体系结构 手机看文章 扫描二维码
随时随地手机看文章
ARM V7系列下有三个版本的核:

7A​

7R​

7M​

 

一个单片机芯片里面包括了几乎所有功能的芯片。并不是说结构简单。功能少。​

 

执行程序的过程:​

1.从内存读出指令到CPU。一次只能读一条指令。​

2.取出指令之后要进行译码。​

3.执行指令。​

 

主频高,功耗高。​

 ARM7TDMI内容:​

1.三级流水线​

2.冯诺依曼结构(之后的ARM版本使用哈佛结构)​

3.cpi~1.9​

4.T-thumb架构扩展​

 

 

ARM7/ARM9流水线技术(是为了更好的执行程序)

1.1 ARM7流水线技术

ARM7系列处理器中每条指令分取指、译码、执行三个阶段,分别在不同的功能部件上依次独立完成。取指部件完成从存储器装载一条指令,通过译码部件产生下一周期数据路径需要的控制信号,完成寄存器的解码,再送到执行单元完成寄存器的读取、ALU运算及运算结果的写回,需要访问存储器的指令完成存储器的访问。流水线上虽然一条指令仍需3个时钟周期来完成,但通过多个部件并行,使得处理器的吞吐率约为每个周期一条指令,提高了流式指令的处理速度,从而可达到 O.9 MIPS/MHz的指令执行速度。

在三级流水线下,通过R15访问PC(程序计数器)时会出现取指位置和执行位置不同的现象。这须结合流水线的执行情况考虑,取指部件根据PC取指,取指完成后PC+4送到PC,并把取到的指令传递给译码部件,然后取指部件根据新的PC取指。因为每条指令4字节,故PC值等于当前程序执行位置+8。

1.2 ARM9流水线技术

ARM9系列处理器的流水线分为取指、译码、执行、访存、回写。取指部件完成从指令存储器取指;译码部件读取寄存器操作数,与三级流水线中不占有数据路径区别很大;执行部件产生ALU运算结果或产生存储器地址(对于存储器访问指令来讲);访存部件访问数据存储器;回写部件完成执行结果写回寄存器。把三级流水线中的执行单元进一步细化,减少了在每个时钟周期内必须完成的工作量,进而允许使用较高的时钟频率,且具有分开的指令和数据存储器,减少了冲突的发生,每条指令的平均周期数明显减少。

2 三级流水线运行情况分析

三级流水线在处理简单的寄存器操作指令时,吞吐率为平均每个时钟周期一条指令;但是在存在存储器访问指令、跳转指令的情况下会出现流水线阻断情况,导致流水线的性能下降。图1给出了流水线的最佳运行情况,图中的MOV、ADD、SUB指令为单周期指令。从T1开始,用3个时钟周期执行了3条指令,指令平均周期数(CPI)等于1个时钟周期。

 

ARM编程模型(重点):​

ARM体系的CPU有两种工作状态

1、ARM状态(学习重点):处理器执行32位的字对齐的ARM指令;

2、Thumb状态:处理器执行16位的、半字对齐的Thumb指令;

在程序运行的过程中,可以在两种状态之间进行相应的转换。处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。

CPU上电处于ARM状态

三、ARM体系的CPU有以下7种工作模式:

1、用户模式(Usr):用于正常执行程序;

2、快速中断模式(FIQ):用于高速数据传输;

3、外部中断模式(IRQ):用于通常的中断处理;

4、管理模式(svc):操作系统使用的保护模式;

5、数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储以及存储保护;

6、系统模式(sys):运行具有特权的操作系统任务;

7、未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件。​

 

ARM寄存器组织

一、ARM工作状态下的寄存器组织

ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个位状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14~R0、程序计数器PC(即R15)、一个状态寄存器都是可访问的。

通用寄存器:参与运算的数据均放在通用寄存器

通用寄存器包括R0~R15,可以分为3类:

(1)未分组寄存器R0~R7

(2)分组寄存器R8~R14

(3)程序计数器PC(R15)

1.未分组寄存器R0~R7

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

2.分组寄存器R8~R14

对于分组寄存器,它们每一次所访问的物理寄存器都与当前处理器的运行模式有关.对于R8~R12来说,每个寄存器对应2个不同的物理寄存器,当使用FIQ(快速中断模式)时,访问寄存器R8_fiq~R12_fiq;当使用除FIQ模式以外的其他模式时,访问寄存器R8_usr~R12_usr.

对于R13,R14来说,每个寄存器对应6个不同的物理寄存器,其中一个是用户模式与系统模式共用,另外5个物理寄存器对应其他5种不同的运行模式,并采用以下记号来区分不同的物理寄存器:

R13_

R14_

其中mode可为:usr,fiq,irq,svc,abt,und.

通用寄存器的特殊用途:​

寄存器R13在ARM指令中常用作堆栈指针SP,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针,而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针.芯片中的寄存器是稳定的,不会出现问题的。

由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间。这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。

R14称为子程序链接寄存器LR(Link Register),当执行子程序调用指令(BL)时,R14可得到R15(程序计数器PC)的备份.

在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值复制给R14,执行完子程序后,又将R14的值复制回PC,即可完成子程序的调用返回。以上的描述可用指令完成。

执行以下任意一条指令:

MOV PC, LR

BX LR

在子程序入口处使用以下指令将R14存入堆栈:

STMFD SP!,{,LR}

对应的,使用以下指令可以完成子程序返回:

LDMFD SP!,{,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个字节程序状态寄存器

 

不同工作模式下的通用寄存器的区别:

usr/sys:R0-R15二者共用​

        ​

irq: R0-12,R15没有区别

        R13-irq

        R14​​-irq

svc:​R0-12,R15没有区别

        R13-svc

        R14​​-svc

und:同上

abt:同上​

fiq:​R0-R7,R15没有区别

  R9-fiq,R10-fiq,R11-fiq,R12-fiq,R13-fiq,R14-fiq​

7种工作模式下,寄存器使用情况

4.寄存器R16

寄存器R16用作CPSR(CurrentProgram Status Register,当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。

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

由于用户模式和系统模式不属于异常模式,它们没有SPSR,当在这两种模式下访问SPSR,结果是未知的。​

关键字:ARM  体系结构 引用地址:ARM体系结构学习2

上一篇:ARM体系结构学习1
下一篇:ARM体系结构学习3

推荐阅读最新更新时间:2024-03-16 14:49

ARM学习《七》——关于STM32中断设置之浅见
关于中断的设置,在STM32的PDF文档中是找不到关于NVIC相关寄存器的说明的,我不知道为什么,是让大家摸不着门道吗?还是故装高深?我非常的不理解。我最后是在《Cortex-M3权威指南》这本书上找到NVIC相关寄存器的,这本书很好,建议大家买来仔细阅读。 在STM32的PDF文档中关于中断的设置只给出了一个中断异常向量表,让人摸不着头脑,其实NVIC相关寄存器才是管理STM32所有中断开关和中断优先级的司令部,NVIC 共支持1 至240 个外部中断输入(通常外部中断写作IRQs)。具体的数值由芯片厂商在设计芯片时决定。此外,NVIC 还支持一个 永垂不朽 的不可屏蔽中断(NMI)输入。NMI 的实际功能亦由芯片制造商决定。
[单片机]
<font color='red'>ARM</font>学习《七》——关于STM32中断设置之浅见
ARM异常与中断处理
中断是ARM处理器提高工作效率的方法之一。 Ⅰ、形象理解中断: 假设有个大房间里面有小房间,婴儿正在睡觉,他的妈妈在外面看书。母亲怎么才能知道小孩醒? 过一会打开一次房门,看婴儿是否睡醒,让后接着看书 一直等到婴儿发出声音以后再过去查看,期间都在读书 查询 while(1) { 1 read book(读书) 2 open door(开门) if(睡) return(read book) else 照顾小孩 } 中断 while(1) { read book 中断服务程序()//声音中断 { 处理照顾小孩 } } 两种方式对比:很明显,第一种会累死妈妈滴。
[单片机]
<font color='red'>ARM</font>异常与中断处理
ARM指令详解
算术和逻辑指令 ADC : 带进位的加法 (Addition with Carry) ADC{条件}{S} , , dest = op_1 + op_2 + carry ADC 将把两个操作数加起来,并把结果放置到目的寄存器中。它使用一个进位标志位,这样就可以做比 32 位大的加法。下列例子将加两个 128 位的数。 128 位结果: 寄存器 0、1、2、和 3 第一个 128 位数: 寄存器 4、5、6、和 7 第二个 128 位数: 寄存器 8、9、10、和 11。 ADDS R0, R4, R8 ; 加低端的字 ADCS R1, R5, R9
[单片机]
面对不思进取的Intel,ARM阵营准备进攻桌面市场?
在移动和嵌入式市场已经取得决定性成功的ARM,显然已经把眼光放在了更广阔的市场上,毕竟不扩展市场领域,如何才能对得起孙正义460亿美元的巨额投资呢? 现在仍旧由X86处理器把持的市场也就剩下服务器和桌面市场两大块。服务器市场攻坚已经多年,但仍旧毫无成效,具体可以看商业技术评论此前的文章《ARM服务器军团全军覆没,还有人能搅动这潭水吗》。 桌面市场由于这几年面临饱和,原来并不在ARM的计划之内,但随着AMD这几年的沉沦,Intel在缺乏竞争的情况下,产品升级毫无亮点,ARM似乎看到了逆袭的机会。 英特尔近年被广大网友戏称为牙膏厂,指其更新和挤牙膏一样慢。 之所以这样,一方面的确是缺乏竞争刺激,另一方面是技术遇到瓶颈,
[半导体设计/制造]
瑞萨RA系列32位Arm Cortex-M MCU让IoT时代更安全
全球半导体解决方案供应商瑞萨电子集团宣布, RA产品家族32位Arm® Cortex®-M微控制器(MCU)获得PSA 2级认证和IoT平台安全评估标准(SESIP)认证。 配备灵活配置软件包(FSP)的RA6M4 MCU已通过PSA 2级认证,在RA4和RA6系列MCU获得PSA 1级认证的基础上进一步进行扩展。瑞萨RA6M3、RA6M4和RA4M2 MCU产品群均已通过“物理和逻辑攻击者”防护认证的SESIP1标准。 除被广泛认可的行业认证外,瑞萨RA MCU还通过在Armv8-M的Arm TrustZone®基础上结合经NIST CAVP认证的安全加密引擎,为客户打造先进的物联网安全性。RA产品家族融合了基于硬
[单片机]
瑞萨RA系列32位<font color='red'>Arm</font> Cortex-M MCU让IoT时代更安全
iOS逆向工程之Hopper中的ARM指令
一、Hopper中的ARM指令 ARM处理器就不多说了,ARM处理器因为低功耗等原因,所以大部分移动设备上用的基本上都是ARM架构的处理器。当然作为移动设备的Android手机,iPhone也是用的ARM架构的处理器。如果你想对iOS系统以及你的应用进一步的了解,那么对ARM指令集的了解是必不可少的,ARM指令集应该也算得上是iOS逆向工程的基础了。 当你使用Hopper进行反编译时,里边全是ARM的指令,那是看的一个爽呢。下面就是使用Hopper打开MobileNote.app的一个Hopper的界面。从主窗口中可以看到全是ARM的指令呢,如果你对ARM指令不了解,那么如何进行分析呢,对吧。所以对ARM指令的了解,是iOS逆
[单片机]
iOS逆向工程之Hopper中的<font color='red'>ARM</font>指令
Nvidia确认ARM版Surface使用了Tegra芯片
    6月20日消息,微软于昨日正式发布了两款Surface系列平板电脑, 其中Windows 8 Pro版配备的是22nm构架的英特尔Ivy Bridge芯片。而另一款经由Nvidia的确认,使用了Tegra芯片。     Nvidia公布的一段简短公告确认,Windows 8 RT版Surface配备了Tegra芯片,但并未指明具体是哪一款芯片。根据猜测,Surface使用的可能是四核Tegra 3 KAI平台,或者是许多Android设备将会使用的Tegra 3+。   目前,大多数WP设备所使用的都是高通芯片,例如Lumia 900,微软此举可以算作是一个重大的改变。Nvidia的四核芯片在性能和节能方面都十分出色,但目
[手机便携]
64位新人 ARM自有一套
不久前,ARM宣布了自己的第一个64位指令集处理器架构“ARMv8”。该架构基于32位的ARMv7而来,并保留了TrustZone安全执行环境、虚拟化、NEON(高级SIMD)等关键技术特性。Cortex-A9、Cortex-A15等著名核心就是由ARMv7架构衍生出来的。 为了迎接ARMv8 64位架构的到来,ARM正在与整个生态系统合作为其64位指令集提供支持。新的ARM编译器、Fast Models已经提供给关键合作伙伴,大量开源操作系统、应用程序和第三方工具也已在开发之中。ARM宣称,ARMv8新架构将把高能效的64位计算带入高端服务器等新的领域,并提供向下兼容性,便于现有软件的移植。 就具体问题,ARM的
[EEWORLD独家]
64位新人 <font color='red'>ARM</font>自有一套
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved