ARM体系结构与汇编指令

可编程器件的特点
• CPU在固定频率的时钟控制下节奏运行。
• CPU可以通过总线读取外部存储设备中的二进制指令集,然后解码执行。
• 这些可以被CPU解码执行的二进制指令集是CPU设计的时候确定的,是CPU的设计者(ARM公司)定义的,本质上是一串由1和0组成的数字。这就是CPU的汇编指令集。
整个编程及运行过程
• 程序员用汇编指令编程 --经汇编器汇编成二进制可执行程序文件–>二进制文件被CPU读取进去–>CPU内部电路对二进制文件解码–>解码通过则CPU执行指令、完成指令动作。
• 如果程序员用C语言等高级语言编程,则编译器先将C语言程序编译为汇编程序,再进行上面的后续部分。

CISC
• complex instruction set computer复杂指令集CPU
• CISC体系的设计理念是用最少的指令来完成任务(譬如计算乘法只需要一条MUL指令即可),因此CISC的CPU本身设计复杂、工艺复杂,但好处是编译器好设计。CISC出现较早,至今Intel还一直采用CISC设计
RISC
• Reduced Instruction-Set Computer精简指令集CPU
• RISC的设计理念是让软件来完成具体的任务,CPU本身仅提供基本功能指令集。因此RISC CPU的指令集中只有很少的指令,这种设计相对于CISC,CPU的设计和工艺简单了,但是编译器的设计变难了。
iROM和iRAM
• S5PV210出厂时内置了64KB iROM和96KB iRAM。iROM中预先内置烧录了一些代码(称为iROM代码),iRAM属于SRAM(不需软件初始化,上电即可使用)。210启动时首先在内部运行iROM代码,然后由iROM代码开启外部启动流程。
为什么需要设计iROM和iRAM?答案是为了支持多种外部设备启动。
Second boot support
• When 1 st boot mode fails, SD/MMC boot will be tried through SD/MMC channel 2 with 4-bit data
• 当第一启动模式失败时,SD/MMC卡启动模式下将会从SD/MMC2通道尝试再次启动。
• 这种二级启动是一种冗余设计。SoC中第一启动介质故障而导致不能启动时,可以从备用启动介质启动。我们做裸机实验时从SD2启动就是利用了这一设计特性。
BL0做了什么?
• 关看门狗
• 初始化指令cache
• 初始化栈
• 初始化堆
• 初始化块设备复制函数device copy function
• 设置SoC时钟系统
• 复制BL1到内部IRAM(16KB)
• 检查BL1的校验和
• 跳转到BL1去执行
ARM的基本设定
• ARM 采用的是32位架构.
• ARM 约定:
– Byte : 8 bits
– Halfword :16 bits (2 byte)
– Word : 32 bits (4 byte)
– 大部分ARM core 提供:
– ARM 指令集(32-bit)
– Thumb 指令集(16-bit )
– Thumb2指令集(16 & 32bit)
• Jazelle cores 支持 Java bytecode
ARM处理器工作模式
– User : 非特权模式,大部分任务执行在这种模式
– FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式
– IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式
– Supervisor :当复位或软中断指令执行时将会进入这种模式
– Abort : 当存取异常时将会进入这种模式
– Undef : 当执行未定义指令时会进入这种模式
– System : 使用和User模式相同寄存器集的特权模式
除User(用户模式)是Normal(普通模式)外,其他6种都是Privilege(特权模式)。
Privilege中除Sys模式外,其余5种为异常模式。各种模式的切换,可以是程序员通过代码主动切换(通过写CPSR寄存器);也可以是CPU在某些情况下自动切换。各种模式下权限和可以访问的寄存器不同

ARM寄存器

在这里插入图片描述

• ARM共有37个寄存器,都是32位长度
• 37个寄存器中30个为“通用”型,1个固定用作PC,一个固定用作CPSR,5个固定用作5种异常模式下的SPSR。

• CPSR中各个bit位表明了CPU的某些状态信息,这些信息非常重要,和后面学到的汇编指令息息相关(譬如BLE指令中的E就和CPSR中的Z标志位有关)
• CPSR中的I、F位和开中断、关中断有关
• CPSR中的mode位(bit4~bit0共5位)决定了CPU的工作模式,在uboot代码中会使用汇编进行设置。
PC(r15)程序控制寄存器
• PC(Program control register)为程序指针,PC指向哪里,CPU就会执行哪条指令(所以程序跳转时就是把目标地址代码放到PC中)
• 整个CPU中只有一个PC(CPSR也只有一个,但SPSR有5个)。
什么是异常
• 正常工作之外的流程都叫异常
• 异常会打断正在执行的工作,并且一般我们希望异常处理完成后继续回来执行原来的工作
• 中断是异常的一种
异常向量表
• 所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件决定的。
• 当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常,有时伴有一些辅助动作)
• 异常向量表是硬件向软件提供的处理异常的支持。

猜你喜欢

转载自blog.csdn.net/weixin_44763160/article/details/115434488