← 返回笔记列表

2.3存储程序计算机结构简图以及运算器件

2026-03-15
计组汇编

一.运算电路

笔记图片

二.存储结构图


笔记图片

1. 三大核心模块
- **存储器(Main Store)**:也就是内存,存放指令和数据.它旁边连着两个专用寄存器:
- **MAR(内存地址寄存器)**:存放着你要读或写内存的**地址**.它就像你要去拿快递时手里攥着的**取件码**.
- **MBR(内存缓冲寄存器)**:存放着刚从内存读出来的数据,或正要写进内存的数据.它就像你从快递柜里拿出来的**快递盒子**.
- **中央处理器(CPU)**:
- **控制单元(CU)**:它是指挥官,负责解析指令(分析操作码),然后发出控制信号,指挥其他部件干活.
- **算术逻辑单元(ALU)**:它是执行者,负责真正的算术运算(加减)和逻辑运算(与或非).你之前关心的`ADD`指令,就是在它里面完成的.
- **寄存器组**:图上的`P`和`Q`代表CPU内部的高速寄存器(如R0,R1等),用来临时存放最快需要操作的数据.
- **程序计数器(PC)**:
- 它存着当前指令的地址.图上有个**"+4"**的加法器,这正好对应你之前问的"为什么PC加4而不是加1".因为ARM是32位,一条指令占4字节,执行完当前指令,PC就自动加4,指向下一条指令.
我列举一条路径:取指令:
1. **控制单元**把`PC`里的地址送进`MAR`.
(当然这个地址也可以来源于operands也就是操作数的地址,~比如说指令从上往下依次进行对吧,这个指令中需要用内存中其他位置的值,这时候我要取他们相应的地址,所以IR分析后把这些地址码传给MAR,这时候会把左上角的路给堵住,也就是PC不自动加4了,这时候资源或者说来源的地址就是IR的那条路)
2. **内存**(memory)根据`MAR`的地址,找到指令,把指令数据放进`MBR`.(内存地址寄存器来源于PC或者IR)
3. 指令从`MBR`被送到控制单元进行译码(比如说分析这到底是`ADD`还是`LDR`).
4.根据数据传输执行对应MBR中的指令对应寄存器的操作
(如果是加法操作就把算出来的结果再存到寄存器里面)
(数据在内存和寄存器之间以及MBR充当中间量之间流动)ALU`执行运算,结果可能会直接写回寄存器,或者通过`MBR`存回内存.
运算结果的特征(如结果是否为0,有没有进位)会存放在条件码(CCR)里,供后续条件跳转指令使用.
(这个后面会说)
5. 同时,`PC`通过加法器**自动加4**,为取下一条指令做准备.
这个是执行的具体RTL语句

笔记图片

三.操作数的注意

笔记图片

第一个汇编指令这里指的是把地址为200的值从内存拿到R1,注意这里这个200应该是[200],要不arm架构(后续会讲)识别不出来
第二个指的是把200这个值拿到R1
第三个指的是r1+25之后存到R0寄存器,我如果不写#就是地址为[25]的值相加,当然我也可以写成[r2,#25]也就是r2的地址加25之后对应地址的值(也就是基址加偏移)
类arm指令记住就好~

笔记图片