嵌入式Linux ARM汇编(一)——ARM体系结构

2019-07-12 16:27发布

嵌入式Linux ARM汇编(一)——ARM体系结构

一、ARM简介

        ARM是全球领先的半导体知识产权 (IP) 提供商Advanced RISC Machine,是专门从事基于RISC 技术芯片设计开发的公司,ARM 的商业模式主要涉及 IP 的设计和许可,而非生产和销售实际的半导体芯片。作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可由合作公司生产各具特 {MOD}的芯片,世界各大半导体生产商从ARM公司购买其设计的ARM 微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM 微处理器芯片进入市场。在全世界有几十家大的半导体公司都使用ARM 公司的授权,因此既使得ARM 技术获得更多的第三方工具、制造、软件的支持,又使整个系统成本降低,使产品更容易进入市场被消费者所接受,更具有竞争力。    ARM设计了大量高性价比、耗能低的RISC处理器、相关技术及软件,技术具有性能高、成本低和能耗省的特点,智能机、平板电脑、嵌入控制、多媒体数字等处理器领域拥有主导地位。全世界超过95%的智能手机和平板电脑都采用ARM架构 。2014年基于ARM技术的全年全球出货量是120亿颗,从诞生到现在为止基于ARM技术的芯片有600亿颗。 ARM体系结构的基本版本:版本版本变种系列号处理器核V1V1ARM1ARM1V2V2ARM2ARM2V2aARM2aSARM3ARM3V3V3ARM6ARM6ARM600ARM610ARM7ARM7ARM700ARM710V4V4TARM7TDMIARM710TARM720TARM740TV4TARM9ARM9TDMIARM920TARM940TV5V5TEARM9E-SV6V6ARM11ARM11ARM11562-SARM1156T2F-SARM11JZF-SV7V7ARM CotexARM Cotex-A8ARM Cotex-R4ARM Cotex-M3    

二、计算机体系结构

1 .诺依曼体系结构

wKiom1dRSSqQ9eDCAAAe0Lx0__o988.png-wh_50 
 冯.诺依曼体系结构的特点:A、处理器使用同一个存储器,经由同一个总线传输B、完成一条指令需要3个步骤:即取指令->指令译码->执行指令C、指令和数据共享同一总线的结构 

2、哈佛体系结构

wKioL1dRSv-gVG-oAAAsXtTqnXk961.png 
哈佛体系结构的特点:A、将程序指令存储和数据存储分开    B、中央处理器首先到程序指令存储器中读取程序指令。解码后到数据地址,再到相应的数据存储器读取数据,然后执行指令    C、程序指令存储与数据存储分开,可以使指令和数据有不同的数据宽度。ARM7采用冯.诺依曼体系结构,ARM9采用哈佛体系结构 

三、复杂指令集与精简指令集

1 CISC 复杂指令集

        CISC 复杂指令集:采用冯.诺依曼体系结构,数据线和指令线分时复用。存储器操作指令多,汇编程序相对简单,指令结束后响应中断 CPU电路设计复杂,面积大,功耗大。

2RISC 精简指令集

        RISC 精简指令集:采用哈佛体系结构。数据线和指令线分离。对存储器操作有限,汇编程序占空间大,在适当地方响应中断, CPU电路较少,体积小功耗低。ARM采用RISC精简指令集 。

四、ARM处理器模式

    为了和操作系统更好地适配,ARM Cortex A-8处理器有九种工作模式。wKioL1dRTFKTN5LRAAFTRrSX7HI983.png     ARMV7体系结构支持的9种处理器模式分别为:用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式,监视模式,软中断模式。

1ARM的指令集

     ARM有三种指令集:ARM、ThumbThumb32。ThumbARM体系结构中一种16位的指令集。从ARMv4T之后的ARM处理器有一种16-bit指令模式,叫做Thumb,较短的指令码提供整体更佳的编码密度,更有效地使用有限的内存带宽。所有 ARM9 和后来的家族,包括 XScale 都纳入了 Thumb 技术。Thumb32兼容16位和32位指令。ARM32位指令。在不牺牲性能的同时,尽量简化处理器。同时从体系结构上灵活支持处理器扩展。采用RISC结构。RISC处理器简化了处理器结构,减少复杂功能指令的同时,提高了处理器速度。

2ARM的流水线结构

    ARM处理器使用流水线来增加处理器指令流的速度,这样可以使几个操作同时进行。并使处理和存储器系统连续操作。

   arm处理器分为三级:取指->译码->执行      取指:指令从存储器中取出      译码:对指令使用的寄存器进行译码      执行:从寄存器组中读取寄存器,执行移位和ALU操作,寄存器被写回到寄存器组中

3ARM处理器支持的类型

      字节  8      半字  16          32      ARM处理器的所有数据操作都以字为单位,ARM指令的长度刚好是一个字,Thumb指令长度刚好是半个字。

4ARM处理器状态

      ARM处理器内核使用ARM结构,该结构包含32位的ARM指令集和16Thumb指令集,因此ARM有两种操作状态      ARM状态:32      Thumb状态:16

5ARM处理器的寄存器

        寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC),在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)    IR 用于存储指令    PC 用于存储程序运行的地址(即当前指令在内存中的位置)    寄存器是由一个指令的输出或输入可以直接索引到的暂存器群组。所有的计算机指令都是进入寄存器后被直接读取ARM的汇编编程,本质上就是针对CPU寄存器的编程。ARM寄存器分为2类:普通寄存器和状态寄存器ARM A-8处理器各工作模式下的寄存器:wKiom1dRS-qw0UB4AAE5OMeDCWU029.png     ARM A-8处理器共有43个寄存器。普通寄存器34个,状态寄存器9个。USR/SYS共用一组寄存器。        R13(SP)    栈指针寄存器用于存放堆栈的栈顶地址。        SP相当于指针变量,保存的是栈顶的地址,出栈时,从SP指向的内存中取出数据,入栈时将新的内存地址压入栈顶而SP相当于链表的头指针(head)        R14(LR)    链接寄存器存放子程序的返回地址。例如:在主函数内,如果调用子函数,程序会进入到子函数内执行。当子函数执行完毕后,需要回到主函数内,所以在子函数调用前需要将这个地址先保存起来,否则无法找到这个地址。LR用于保存这个地址,这个地址也称为子程序返回地址。当子函数结束后,再将LR内的地址赋给PC即可。         R15(PC) 程序计数器 它的值是当前正在执行的指令在内存中的位置。        当指令执行结束后,CPU会自动将PC值加上一个单位,PC值指向下一条即将执行的指令的地址。如果通过汇编指令对PC寄存器赋值,就会完成一次程序的跳转(如从子函数跳转回主函数内)。        寄存器R16用作CPSR(当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(备份的程序状态寄存器),异常发生时,SPSR用于保存CPSR的值,从异常退出时则可由SPSR来恢复CPSR。由于用户模式和系统模式不属于异常模式,他们没有SPSR,当在这两种模式下访问SPSR,结果是未知的。程序状态寄存器CPSR:wKiom1dRTIbSuPVMAAAwZtLm23I700.png 各bit代表的意义如下:M[4:0]:处理器模式T bit:是否支持Thumb指令F bit:是否禁止FIQI bit:是否禁止IRQA bit:是否禁止异步中止E bit:存储顺序IT bit:是否在支持Thumb-2指令集中的if...then条件执行GE bit:用于某些SIMD指令J bit:是否支持JazelleQ bit:是否运算溢出V bit:ALU是否溢出C bit:ALU是否进位Z bit:ALU结果是否为0N bit:ALU结果是否为负 M0M4表示处理器工作模式(控制位内的模式位)0b10000      User        用户模式0b10001      FIQ         快速中断模式0b10010      IRQ         外部设备产生的中断模式0b10011      Supervisor  管理模式0b10111      Abort       异常模式0b11011      Undefined   未定义模式0b11111      System      系统模式

6、SoC的特殊功能寄存器

    SoC中的寄存器包括ARM CPU处理器内的寄存器和特殊功能寄存器,特殊功能寄存器不在CPU中,而是存在于CPU的外设中,通过访问外设的SFR来编程控制外设是硬件编程控制的方法。

7、S5PV210的内存映射

        以下三张图为S5PV210的内存映射图wKiom1dRTRuCuoBXAAFFuz1GMBs035.png
wKiom1dRTTmj0xS5AAIQUf0GcQU770.pngIRAM和IROM:
wKioL1dRTliyZ1x2AAEB4uNJm4Q791.png
本文出自 “生命不息,奋斗不止” 博客,请务必保留此出处http://9291927.blog.51cto.com/9281927/1785897