ARM架构

0925 上午10.50  视频1.40.00开始

下午14:00开始

MMU

cpu内部架构

MMU开一个进程需要4G,但实际MMU不会开4G,只会开一个合适的大小,所以可以同时运行很多程序

处理器内部架构

在 ARM 处理器中,PC(程序计数器)指针的值是处理器执行指令的核心之一,可以说它在指令的取指、解码、执行等过程中起到了至关重要的作用。下面详细解释 PC 指针的作用与处理器流水线的关联。

PC 指针的工作原理

  1. 取指(Fetch)

    • 在取指阶段,处理器从 PC 指向的地址读取指令。 PC 指向当前要执行的指令的内存地址,并将这一指令从内存中读取到指令寄存器中。
    • 由于 ARM 指令是固定大小的(大多数情况下为 4 字节),所以每次取指时 PC 的值会加上 4(在某些特殊情况下如 Thumb 模式可能会有所不同)。
  2. 解码(Decode)

    • 在解码阶段,处理器解析刚刚取出的指令,确定需要执行的操作和参与的寄存器等信息。
    • 解码阶段虽然不直接改变 PC 的值,但它为处理器后续的执行阶段提供了必要的信息。
  3. 执行(Execute)

    • 在执行阶段,处理器根据解码结果进行相应的计算或操作,如寄存器间的加法、逻辑运算等。
    • 执行完成后,若为跳转指令(例如条件跳转、无条件跳转等),则会修改 PC 的值以指向跳转后的地址。

PC 与 流水线的关系

在现代 ARM 处理器中,流水线技术得到了广泛应用,通常分为几个阶段,例如取指、解码、执行、访存和写回。流水线的设计允许多个指令并行处理,从而提高处理器的整体性能。

  • 流水线结构

    • 在流水线结构中,多个指令可以在不同阶段同时进行。例如,第一条指令在取指阶段,第二条指令在解码阶段,第三条指令在执行阶段,依此类推。例如:
      • Cycle 1: 取指指令1
      • Cycle 2: 取指指令2,解码指令1
      • Cycle 3: 取指指令3,解码指令2,执行指令1
  • PC 的实时更新

    • PC 通常会在取指阶段被更新。因为它在每次取指时会自动加上指令的宽度(如 4 字节),顺序执行。
    • 但是在跳转指令出现时,PC 的更新会变得复杂,可能需要在解码或执行阶段更新,这会涉及到分支预测等技术,以减少因跳转带来的流水线冒险(Stall)。

流水线冒险

流水线中的“冒险”问题指的是指令在不同阶段之间的依赖关系,主要有:

  1. 结构冒险:由于硬件资源不足而导致的冲突。
  2. 数据冒险:指令之间依赖导致的数据读取/写入冲突。
  3. 控制冒险:因分支指令导致的流水线需要多清空和重新加载指令的问题。

为了减少控制冒险,现代处理器使用分支预测技术和延迟槽等技术来优化 PC 的调整和指令的顺序执行。

总结

  • PC 在 ARM 处理器中起到了指向当前执行指令地址的作用。
  • PC 的取指、解码、执行等过程是紧密联系在一起的,形成了处理器指令执行的基本循环。
  • 流水线设计允许指令在多个阶段并行处理,提高了处理器的效率,但也引入了冒险问题,需要通过结构设计和控制策略来解决。

流水线(洗切炒) 

在 ARM 架构中,SP(堆栈指针)、LR(链接寄存器)和 PC(程序计数器)是重要的寄存器,分别用于不同的目的。下面详细解释这些寄存器的功能和 SP 指向的位置。

1. SP(堆栈指针)

  • 定义SP 是堆栈指针,指向当前堆栈的顶部。在 ARM 架构中,堆栈通常向下增长,即每次压入数据,SP 的值会降低。
  • 用途
    • SP 用于管理函数调用和局部变量的存储。当一个函数被调用时,会在堆栈上分配空间,用于存储局部变量、传递参数、保存返回地址等。
    • 当使用 stmfd sp!, {...} 和 ldmfd sp!, {...} 等指令保存和恢复寄存器状态时,SP 的值会自动变化,以确保堆栈的完整性。

2. LR(链接寄存器)

  • 定义LR 是链接寄存器,用于保存函数调用后的返回地址。当一个函数被调用时,返回地址会被自动保存到 LR 中。
  • 用途
    • 在调用其他函数时,LR 会被自动更新,便于函数返回到正确的位置。通常在函数结束时,使用 bx lr 指令返回到保存在 LR 中的地址。

3. PC(程序计数器)

  • 定义PC 是程序计数器,保存当前正在执行的指令地址。在 ARM 中,PC 的值通常表示当前指令的地址加上额外的偏移(通常为 8,因为 ARM 指令的取指流水线机制)。
  • 用途
    • PC 用于跟踪程序的执行流程。当程序执行一条指令时,PC 自动增加,以指向下一条指令。当遇到跳转、分支或中断时,PC 会相应地被更改,以指向新的执行地址。

堆栈的结构

  • 堆栈增长方向:在 ARM 体系结构中,堆栈向下增长。也就是说,当向堆栈中压入数据时,堆栈指针(SP)的值会减少。

  • 示例:在一个函数调用中,可能会有以下过程:

    push {r0, r1, r2}  ; 将寄存器 r0, r1, r2 的值压入堆栈
    

    上述指令会将 SP 的值减少,并在新的堆栈位置存储 r0r1 和 r2 的值。

总结

  • SP:堆栈指针,指向当前堆栈的顶部位置,它用于管理堆栈中的数据,如局部变量和返回地址。
  • LR:链接寄存器,保存返回地址,用于函数调用和返回。
  • PC:程序计数器,指向当前执行指令的地址,自动更新以指向下一条指令。

cpu执行的工作模式

cpu多种身份下工作

异常情况的处理

汇编

cmp

类似于if判断

sp指向栈指针

lr指针指向下一步

pc指向当前执行的下下步

存大数据

初始化栈

工作模式变化后 栈会清0

异常后会跳转到对应地址

spsr拷贝cpsr  返回刚刚的模式

[r0]代表取r0存放内容地址的值,类似于*p

MRS/MSR

汇编代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值