计算机系统层次结构笔记

计算机系统层次结构核心笔记

一、计算机硬件基本组成

计算机硬件系统由五大基本部件构成,它们协同工作完成数据处理和指令执行任务:

  • 输入设备:将外部信息转换为计算机可识别的电信号(如键盘、鼠标)
  • 输出设备:将计算机处理结果转换为人类可识别的形式(如显示器、打印机)
  • 存储器:分为主存储器(内存)和辅助存储器(外存),用于存储数据和指令
  • 运算器:执行算术运算和逻辑运算
  • 控制器:控制计算机各部件协调工作

核心概念 :程序本身用高级语言编写,需经过编译转换为机器语言才能被计算机执行。机器语言由指令数据两部分组成,它们在存储器中以二进制形式存储。

二、主存储器与CPU的交互

主存储器(内存)是CPU能直接访问的存储器,由存储体、地址寄存器(MAR)和数据寄存器(MDR)组成。

2.1 主存储器的组成

  • 存储体:由大量存储单元组成,每个存储单元有唯一的地址
  • MAR(地址寄存器):存放要访问的存储单元地址,其位数决定了可寻址的存储单元个数
  • MDR(数据寄存器):存放从存储体读出或要写入存储体的数据,其位数等于存储字长

2.2 CPU与主存的数据传输过程

读数据过程(CPU从主存取数据)
复制代码
CPU → MAR(地址)→ 存储体 → MDR(数据)→ CPU
  1. CPU将数据的地址发送到MAR地址寄存器
  2. MAR根据地址从存储体中找到对应的存储单元
  3. 存储单元中的数据被取出并放置在MDR数据寄存器中
  4. CPU从MDR数据寄存器中读取数据
写数据过程(CPU向主存存数据)
复制代码
CPU → MAR(地址)
CPU → MDR(数据)
CPU → 写信号 → 存储体
  1. CPU将要写入数据的地址发送到MAR地址寄存器
  2. CPU将要写入的数据发送到MDR数据寄存器
  3. CPU向主存储器发送写入数据的控制信号
  4. 主存储器将MDR中的数据存入MAR指定的地址单元

2.3 主存容量计算

  • 存储单元个数 = 2^MAR位数
  • 存储字长 = MDR位数(单位:bit)
  • 总容量 = 存储单元个数 × 存储字长(bit)= 存储单元个数 × 存储字长 / 8(Byte)

示例

  • MAR=4位 → 2^4=16个存储单元
  • MDR=16位 → 每个存储单元可存放16bit(1个字)
  • 总容量 = 16 × 16bit = 32Byte

易混淆概念

  • 1字节(Byte) = 8bit
  • 1B = 1字节,1b = 1bit
  • 1字(word)的长度由计算机架构决定,通常为16bit、32bit或64bit

三、运算器:算术与逻辑运算的核心

运算器是计算机中执行算术运算和逻辑运算的部件,主要由以下寄存器和功能单元组成:

寄存器/单元 功能
ACC(累加器) 存放操作数或运算结果
MQ(乘商寄存器) 乘除运算时存放操作数或运算结果
X(通用操作数寄存器) 存放操作数
ALU(算术逻辑单元) 通过内部电路实现算术运算(加减乘除)和逻辑运算(与或非)

运算器寄存器在不同运算中的作用

运算类型 ACC MQ X
加法 被加数、和 - 加数
减法 被减数、差 - 减数
乘法 乘积高位 乘数、乘积低位 被乘数
除法 被除数、余数 除数

四、控制器:计算机的指挥中心

控制器负责控制计算机各部件协调工作,是计算机的"大脑",主要由以下部件组成:

部件 功能
CU(控制单元) 分析指令,产生控制信号,控制其他部件工作
IR(指令寄存器) 存放当前正在执行的指令,对用户透明
PC(程序计数器) 存放下一条要执行的指令地址,具有自动加1功能

透明概念:在计算机中,"透明"指某个部件或功能存在并正常工作,但用户不需要了解其内部实现细节。例如,我们不需要知道指令寄存器如何存储指令,只需知道它能完成指令存储的功能。

五、计算机的完整工作过程

计算机的工作过程本质上是不断取指令、分析指令和执行指令的循环过程。

5.1 指令与数据的存储

指令和数据都以二进制形式存储在主存储器中,CPU通过指令周期的不同阶段来区分它们:

  • 取指阶段:从主存中取出的是指令
  • 执行阶段:从主存中取出的是数据

5.2 工作过程示例(计算y=a*b+c)

假设主存中存储了以下指令和数据:

地址 内容 含义
0 000001 0000000101 取数a至ACC
1 000100 0000000110 乘b得ab,存于ACC中
2 000011 0000000111 加c得ab+c,存于ACC中
3 000010 0000001000 将ab+c存于主存单元
4 000110 0000000000 停机
5 0000000000000010 原始数据a=2
6 0000000000000011 原始数据b=3
7 0000000000000001 原始数据c=1
8 0000000000000000 原始数据y=0

执行步骤

  1. 取指阶段:PC=0,从主存地址0取出指令"取数a至ACC",存入IR,PC自动加1变为1
  2. 执行阶段:根据指令地址码0000000101(十进制5),从主存地址5取出数据2,存入ACC
  3. 取指阶段:PC=1,从主存地址1取出指令"乘b得ab",存入IR,PC自动加1变为2
  4. 执行阶段:根据指令地址码0000000110(十进制6),从主存地址6取出数据3,与ACC中的2相乘,结果6存入ACC
  5. 取指阶段:PC=2,从主存地址2取出指令"加c得ab+c",存入IR,PC自动加1变为3
  6. 执行阶段:根据指令地址码0000000111(十进制7),从主存地址7取出数据1,与ACC中的6相加,结果7存入ACC
  7. 取指阶段:PC=3,从主存地址3取出指令"将结果存于主存",存入IR,PC自动加1变为4
  8. 执行阶段:根据指令地址码0000001000(十进制8),将ACC中的7存入主存地址8
  9. 取指阶段:PC=4,从主存地址4取出指令"停机",存入IR
  10. 执行阶段:执行停机指令,计算机停止工作

最终,主存地址8中的数据变为7,即y=7。

六、栈帧与函数调用机制

栈是一种"后进先出"(LIFO)的数据结构,在计算机中用于实现函数调用和局部变量存储。

6.1 栈的基本操作

x86架构中,栈默认以4字节为单位进行操作,主要使用两条指令:

  • push:先将esp(栈指针)减4,再将src中的数据压入栈顶
  • pop:将栈顶元素弹出写入dest,再将esp加4

:src可以是立即数、寄存器或主存地址;dest可以是寄存器或主存地址。

6.2 栈帧结构

栈帧是为每个函数调用分配的栈空间,用于存储函数的参数、局部变量、返回地址等信息。

复制代码
高地址
+-----------------+
|                 |
|   其他数据      |
|                 |
+-----------------+
|   main栈帧      |
|                 |
+-----------------+
|   caller栈帧    |
|                 |
+-----------------+
|   add栈帧       |
|                 |
+-----------------+ <-- esp(栈顶)
低地址
  • ebp(基址指针):指向当前栈帧的底部
  • esp(栈指针):指向当前栈帧的顶部

6.3 函数调用时的栈帧切换

函数调用主要通过callenterleaveret指令实现。

call指令的作用
  1. 将下一条指令的地址(返回地址)压入栈中保存
  2. 无条件跳转到被调用函数的第一条指令
被调用函数的栈帧初始化(enter指令等价于)
asm 复制代码
push ebp        ; 保存上一层函数的栈帧基址
mov ebp, esp    ; 设置当前函数的栈帧基址
sub esp, n      ; 为局部变量分配n字节的栈空间
函数返回过程(leave指令等价于)
asm 复制代码
mov esp, ebp    ; 释放当前函数的局部变量空间
pop ebp         ; 恢复上一层函数的栈帧基址
ret             ; 从栈中弹出返回地址,跳转到该地址继续执行

6.4 函数调用完整示例

复制代码
caller函数调用add函数的过程:

1. caller执行call add指令
   - 将返回地址(call指令的下一条指令地址)压入栈
   - 跳转到add函数的入口

2. add函数执行
   - push ebp        ; 保存caller的ebp
   - mov ebp, esp    ; 设置add的栈帧基址
   - sub esp, 24     ; 为add的局部变量分配24字节空间
   - ... 执行函数体 ...
   - leave           ; 释放add的栈空间,恢复caller的ebp
   - ret             ; 弹出返回地址,跳转到caller继续执行

七、总结

计算机系统层次结构是理解计算机工作原理的基础。从硬件层面看,计算机由输入输出设备、存储器、运算器和控制器组成;从软件层面看,高级语言需要经过编译转换为机器语言才能被计算机执行。

CPU与主存的交互是计算机工作的核心,通过MAR和MDR实现地址和数据的传输。运算器负责执行算术和逻辑运算,控制器负责控制各部件协调工作。计算机的工作过程本质上是取指-执行的循环过程。

栈帧机制是实现函数调用的关键,通过ebp和esp两个指针管理栈空间,callret指令实现函数的调用和返回。理解这些概念对于深入学习计算机组成原理和汇编语言至关重要。

相关推荐
SHARK_pssm1 小时前
【数据结构——单链表】
数据结构·经验分享·笔记
数智工坊1 小时前
周志华《Machine Learning》学习笔记--第十一章--特征学习与稀疏学习
笔记·学习·机器学习
喵叔哟1 小时前
第2周学习笔记
笔记·python·学习·langchain
数智工坊2 小时前
周志华《Machine Learning》学习笔记--第十二章--计算学习理论
笔记·学习·机器学习
Aaron158811 小时前
无人机反制中AOA+TDOA联合定位技术与雷达探测定位技术的应用对比分析
arm开发·嵌入式硬件·fpga开发·硬件工程·无人机·信息与通信·信号处理
三品吉他手会点灯11 小时前
C语言学习笔记 - 43.运算符与表达式 - 运算符1 - 运算符的分类和简单介绍
c语言·笔记·学习·算法
疯狂打码的少年11 小时前
中断处理过程与中断优先级
笔记
likerhood12 小时前
WSL 下安装 Miniconda 笔记
笔记·wsl
喜欢打篮球的普通人13 小时前
LLVM 后端流程与关键数据结构:从 IR 到机器码的入门笔记
java·数据结构·笔记