晓晓白之ARM处理器体系架构

1. 指令系统

- RISC:精简指令集指令系统  --ARM

    - 寻址方式:比较少(10种以内)

    - 指令集中指令的条数:100条左右

    - 大的、统一的寄存器文件:装载/保存结构(Load/Store),数据处理操作只针对寄存器内容,而不直接对存储器进行操作:

    统一和固定长度的指令域,简化了指令的译码,便于指令流水线设计。--即大多数指令的执行时间是相等的

- CISC:复杂指令集指令系统  -- x86, 51

    - 寻址方式:比较多(10种以上)

    - 指令集中指令的条数

2. 数据类型

- 字(4字节)

- 半字(2字节)

- 字节

3. 寄存器

ARM处理器有37个寄存器,在不同运行模式下处理器使用的寄存器是不完全一致

两大类:

    - 31个通用32位寄存器

    - 6个状态寄存器

其中R0~R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。

寄存器R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器

寄存器R8~R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。

R13: 堆栈指针SP -- 指向堆栈栈顶位置的指针(指向栈顶元素或者栈顶插入位置)

R14: 链接寄存器LR -- 作为子程序(函数)返回用

 R14为链接寄存器(LR),在结构上有两个特殊功能:

 在每种模式下,模式自身的R14版本用于保存子程序返回地址;(跳转到函数之前的位置)

 当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。

R15: 程序计数器PC

  它指向正在取指的地址。 -- 下一条要执行的指令的位置

程序状态寄存器:CPSR

    运算的结果:NZCV

        - N:符号位

        - Z:零位

        - C:进位/借位

        - V:溢出

4. 异常

异常(Exception)是指任何打断处理器正常执行,并且迫使处理器进入一个由有特权的特殊指令执行的事件。

异常可分为4类:中断(interrupt)、陷井(trap)、故障(fault)和终止(abort)

- 上下文切换:

a. 将CPSR保存到对应的SPSR  -- 状态寄存器的保护

b. 将当前程序中使用的数据进行压栈 -- 数据保护

c. 将返回地址(当前的PC值)保存到LR中 -- 返回位置

d. 将切换的入口地址(中断向量)赋值给PC -- 实现跳转

- 异常返回(中断、函数调用结束、内循环挑战到外循环):

a. 将SPSR恢复到CPSR中 -- 状态恢复

b. 数据栈中的数据弹栈 -- 数据恢复

c. 将LR赋值给PC  -- 返回

5. ATPCS

过程调用标准ATPCS(ARM-Thumb Produce Call Standard)规定了子程序间相互调用的基本规则, ATPCS规定子程序调用过程中寄存器的使用规则、数据栈的使用规则及参数的传递规则。

寄存器使用规则:

R0-R3: 函数调用时的参数寄存器,用来存放前4个函数参数并存放返回值。在函数内如果将这些寄存器用作其他用途,将破坏其值。R0还作为函数的返回值

R4-R11: 通用变量寄存器(一般使用得比较多的是R4-R8)

R12: IP, 临时过渡寄存器,函数调用时会破坏其值

今天就到这吧,希望对大家有帮助~

本人小白一枚,博客仅仅代表我个人主观见解,记录成长笔记。
笔记是以最简单的方式,只展示最核心的原理。
若有与 大神大大 见解有歧义,我绝对坚信 大神大大 见解是对的,我的是错的。
感谢~!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值