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

一、ARM简介

        ARM是全球领先的半导体知识产权 (IP) 提供商Advanced RISC Machine,是专门从事基于RISC 技术芯片设计开发的公司,ARM 的商业模式主要涉及 IP 的设计和许可,而非生产和销售实际的半导体芯片。作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可由合作公司生产各具特色的芯片,世界各大半导体生产商从ARM公司购买其设计的ARM 微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM 微处理器芯片进入市场。在全世界有几十家大的半导体公司都使用ARM 公司的授权,因此既使得ARM 技术获得更多的第三方工具、制造、软件的支持,又使整个系统成本降低,使产品更容易进入市场被消费者所接受,更具有竞争力。

    ARM设计了大量高性价比、耗能低的RISC处理器、相关技术及软件,技术具有性能高、成本低和能耗省的特点,智能机、平板电脑、嵌入控制、多媒体数字等处理器领域拥有主导地位。全世界超过95%的智能手机和平板电脑都采用ARM架构 。2014年基于ARM技术的全年全球出货量是120亿颗,从诞生到现在为止基于ARM技术的芯片有600亿颗。

 

ARM体系结构的基本版本:

版本

版本变种

系列号

处理器核

V1

V1

ARM1

ARM1

V2

V2

ARM2

ARM2

V2a

ARM2aS

ARM3

ARM3

V3

V3

ARM6

ARM6ARM600ARM610

ARM7

ARM7ARM700ARM710

V4

V4T

ARM7TDMIARM710TARM720TARM740T

V4T

ARM9

ARM9TDMIARM920TARM940T

V5

V5TE

ARM9E-S

V6

V6

ARM11

ARM11ARM11562-SARM1156T2F-SARM11JZF-S

V7

V7

ARM Cotex

ARM Cotex-A8ARM Cotex-R4ARM Cotex-M3

 

   

二、计算机体系结构

1 .诺依曼体系结构

嵌入式Linux ARM汇编(一)——ARM体系结构_第1张图片

 

 

冯.诺依曼体系结构的特点:

A、处理器使用同一个存储器,经由同一个总线传输

B、完成一条指令需要3个步骤:即取指令->指令译码->执行指令

C、指令和数据共享同一总线的结构

 

2、哈佛体系结构

 

哈佛体系结构的特点:

A、将程序指令存储和数据存储分开

    B、中央处理器首先到程序指令存储器中读取程序指令。解码后到数据地址,再到相应的数据存储器读取数据,然后执行指令

    C、程序指令存储与数据存储分开,可以使指令和数据有不同的数据宽度。

ARM7采用冯.诺依曼体系结构,ARM9采用哈佛体系结构

 

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

1 CISC 复杂指令集

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

2RISC 精简指令集

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

四、ARM处理器模式

    为了和操作系统更好地适配,ARM Cortex A-8处理器有九种工作模式。

 

    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处理器各工作模式下的寄存器:

嵌入式Linux ARM汇编(一)——ARM体系结构_第2张图片     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:

 

各bit代表的意义如下:

M[4:0]:处理器模式

T bit:是否支持Thumb指令

F bit:是否禁止FIQ

I bit:是否禁止IRQ

A bit:是否禁止异步中止

E bit:存储顺序

IT bit:是否在支持Thumb-2指令集中的if...then条件执行

GE bit:用于某些SIMD指令

J bit:是否支持Jazelle

Q bit:是否运算溢出

V bit:ALU是否溢出

C bit:ALU是否进位

Z bit:ALU结果是否为0

N 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的内存映射图

嵌入式Linux ARM汇编(一)——ARM体系结构_第3张图片


嵌入式Linux ARM汇编(一)——ARM体系结构_第4张图片

IRAM和IROM:

嵌入式Linux ARM汇编(一)——ARM体系结构_第5张图片