计算机组成原理⚔速通(BuShi)
计算机系统概述
发展历程*
- 计算机的四代变化
- 电子管时代
- 晶体管时代
- 中小规模集成电路时代
- 超大规模集成电路时代
- 微型计算机的发展以 微处理器 的技术为 标志
- 汇编语言用助记符编写
- 解释程序边翻译边执行
层次结构
计算机硬件
在计算机中,运算器由算术逻辑单元 ALU (Arithmetic Logic Unit)、移位器、状态寄存器和通用寄存器等组成。
计算机软件
性能指标
字长
字长(机器字长)指计算机一次整数运算所能处理的二进制数据的 位数,也是常说的 32位计算机 中的实际含义。其值还等于CPU内部用于整数计算的运算器位数,等于通用寄存器宽度。
字长越长,计算精度越高。
指令字长:一个指令字中包含的二进制代码的位数
存储字长:一个存储单元存储的二进制代码的位数
以上字长都必须是字节的整数倍
运算速度
- 吞吐量
- 主频
- CPI
- MIPS
- MFLOPS、GFLOPS、TFLOPS、PFLOPS
机器码
存储系统
指令系统
指令格式
一条指令就是机器语言中的一个语句,它是一组有意义的二进制代码。通常包括操作码字段和地址码字段。
操作码字段指出指令中应该执行什么性质的操作;
地址码字段给出被操作的信息(指令或数据)的地址。
根据地址码数目的不同,可将指令划分为以下几种格式:
- 零地址指令:只给出操作码OP,而没有显式地址。要么是不需要操作数的指令,如空操作、停机、关中断等;要么是零地址的运算类指令(仅用于堆栈计算机中)。
- 一地址指令:操作含义一般是 ,或是隐含累加器,即
- …
定长操作码
在指令字的最高位部分分配固定的若干位(定长)表示操作码。
扩展操作码
使操作码的长度随地址码的减少而增加,使得不同地址指令具有不同长度的操作码。
必须注意:
- 不允许短码是长码的前缀,否则会造成二义性
- 地址指令的条数计算
寻址方式
汇编指令
指令格式
- AT & T
- Intel
操作数标记
| 符号 | 含义 |
|---|---|
<reg32> | 任意 32 位寄存器,如 eax, ebx, ecx, edx, esi, edi, esp, ebp |
<reg16> | 任意 16 位寄存器(register),如 ax, bx,cx, dx |
<reg8> | 任意 8 位寄存器,如 ah, al, bh, bl, ch, cl, dh, dl |
<con> | 任意常数(constant),指定位数,如 <con8>, <con16>, <con32> |
<mem> | 任意内存地址(memory),如 [eax], [var+4].中括号是Intel格式的寻址 |
数据传送指令(以 Intel 格式为例,下同)
- MOV 指令:
mov <reg/mem>, <reg/mem>将第二个操作数的内容复制到第一个操作数中。(二者不能全是<mem>) - PUSH 指令:
push <reg32/con32/mem>将操作数压入堆栈。 ESP 是栈顶,压栈前先 ESP-4 → ESP。 - POP 指令:
pop edi/[ebx]将栈顶元素弹出到指定内存中。然后再 ESP+4 → ESP。
算术逻辑运算指令
- ADD/SUB 指令:
add/sub <reg/mem>, <reg/mem>将两个操作数相加/减(第一个作为被减数),结果保存在第一个操作数中。(二者不能全是<mem>) - INC/DEC 指令:
inc/dec <reg/mem>将操作数自增/减。 - IMUL 指令:
imul <reg32>, <reg32/mem>, (<con>)带符号整数乘法指令。()表示可选。当只有两个操作数时,将二者相乘,结果存入第一个操作数(必须是寄存器)中。当有三个操作数时,后两个相乘存入第一个操作数(必须是寄存器)中。结果溢出时, OF标志被置1。 - IDIV 指令:
idiv <reg32/mem>将 edx:eax 中共64位的整数除以操作数,商送到 eax,余数送到 edx。 - AND/OR/XOR 指令:
and/or/xor <reg/mem>, <reg/mem/con>逻辑与或还有异或,结果放在第一个操作数中。(二者不能全是<mem>) - NOT 指令:
not <reg/mem>将操作数按位取反。 - NEG 指令:
neg <reg/mem>将操作数取负,即reg = -reg。 - SHL/SHR 指令:
shl/shr <reg/mem>, <con8/cl>将第一个操作数进行逻辑左/右移,第二个操作数的移位的位数。
控制流指令
x86 汇编语言中,可以通过一个标签 <label> 来指示程序中某条指令的地址,只需在指令前插入 label 即可。如:
1 | mov esi, [ebp+8] |
控制流指令的作用就是可以通过 label 使得 x86 中用于指向当前指令的指令指针 IP 转移到 label 所指的地址。
- JMP 指令:
jmp <label>无条件直接跳转。 - J condition 指令:根据 CPU 状态字中的一系列条件进行转移。
语法如下:
1 | je <label> #jump when equal |
- CMP/TEST 指令:
cmp/test <reg/mem>, <reg/mem>cmp是比较两个操作数的值,test是对两个操作数逐位与运算。这两个指令均不保存结果,只根据结果设置CPU 中状态字的条件码,因此该指令需要搭配 J condition 指令一起使用。(二者不能全是<mem>) - CALL/RET 指令:
call <label> / ret用于实现子程序的调用和返回。
CISC & RISC
| 对比项目 | CISC | RISC |
|---|---|---|
| 中文 | 复杂指令系统计算机 | 精简指令系统计算机 |
| 系统特点 | 指令复杂而庞大 | 指令简单精简 |
| 指令数目 | 一般大于 200 条 | 一般小于 100 条 |
| 指令字长 | 不固定 | 定长 |
| 可访存指令 | 不加限制 | 只有 Load/Store 指令 |
| 各种指令执行时间 | 相差较大 | 绝大多数在一个周期内完成 |
| 各种指令使用频率 | 相差很大 | 都比较常用 |
| 通用寄存器数量 | 较少 | 多 |
| 目标代码 | 难以通过优化编译生成高效代码 | 采用优化的编译程序,代码高效 |
| 控制方式 | 绝大多数为微程序控制 | 绝大多数为组合逻辑控制 |
| 指令流水线 | 可以通过一定方式实现 | 必须实现 |
中央处理器
CPU 的组成部分,各寄存器的作用以及透明性
控制器以外的部件都可以视为执行部件
指令周期、机器周期(也叫 CPU周期)、节拍、时钟周期、存取周期
时钟脉冲信号是由机器脉冲源发出的脉冲信号经整形和分频后形成的,其信号宽度称为时钟周期。
时钟周期以相邻状态单元间组合逻辑电路的最大延迟为基准确定
取指操作是控制器固有的功能,无需在操作码的控制下完成。在指令长度相同的情况下,所有指令的取指操作是相同的。
冯·诺伊曼 计算机 从时间上,可根据指令周期的不同阶段判断从存储器取出的二进制代码是指令还是数据,取指周期取出的是指令,执行周期取出的是数据。从空间上,流向控制器(指令寄存器IR)的是指令,流向运算器(通用寄存器)的是数据。
指令字长取决于操作码的长度、操作数的地址长度、操作数地址个数,与机器字长无必然关系。但为了硬件设计方便,指令字长一般取字节或存储字长的整数倍。若指令字长等于存储字长的 2 倍,则需要两次访存,取值周期等于机器周期的 2 倍。
机器周期,即CPU周期。通常被定义为是通过一次总线事务访问一次主存或 I/O 的时间。一个机器周期中又包含有若干时钟周期,其节拍数可以不等,因此机器周期的长度是可变的。机器周期通常由存取周期决定。
时钟周期,也称 节拍和 T周期。是 CPU 操作的最小单位时间,是对应完成一个微操作的时间。由计算机的主频决定,是主频的倒数。
工作脉冲 是控制器的最小时间单位,起到定时触发作用,一个时钟周期有一个工作脉冲。
重点题型:给出数据通路和操作,要求写出微操作序列。
特别注意一些可同样的操作,对于快速解题有一定帮助。比如取指操作、PC自增、根据数据地址在主存中取数据和存数据的微操作方法等。
| 功能 | 有效控制信号 | 备注 |
|---|---|---|
| MAR ← (PC) | PCout, MARin | |
| MDR ← M(MAR) | MemR, MDRinE | 根据地址取出数据到MDR中 |
| PC ← PC+1 | PC+1 | |
| IR ← (MDR) | MDRout, IRin | 将指令存入指令寄存器中 |
| M(MAR) ← (MDR) | MDRoutE, MemW | 将数据存入指定地址的主存中 |
在采用微程序控制器的 CPU 中,一条指令对应一个微程序,一个微程序由许多微指令构成,一条微指令会发出很多不同的微命令。
| 对比项 | 硬布线控制单元 | 微程序控制单元 |
|---|---|---|
| 传输指令操作码 | OP(IR) → ID | OP(IR) → 微地址形成部件 |
| 传送下地址字段 | 无 | Ad(CMDR)→CMAR |
| 工作原理 | 组合逻辑电路根据指令码、状态和时序即时产生 | 以微程序的形式存放在控制存储器,执行指令时取出 |
| 执行速度 | 快 | 慢 |
| 规整性 | 繁琐,不规整 | 较为规整 |
| 应用场合 | RISC CPU | CISC CPU |
| 易扩展性 | 困难 | 容易 |
流水线吞吐率(TP):
式中, 为任务数, 是处理完 个任务所用的总时间。
在输入流水线中的任务连续的理想情况下,一条 段流水线可以在 个时钟周期 内完成 个任务。即有:
当 时,有.
流水线加速比(S):
式中, 表示不使用流水线的总时间。显然,如果顺序执行 个任务,有. 从而:
当 时,有.
指令流水线阻塞:资源相关、数据相关(用数据旁路技术解决)、控制相关
题型:给出指令序列,判断哪几对指令发生数据冒险(即出现了 读后写 WAR、写后读 RAW、写后写 WAW 的情况)
Flynn 分类法
SIMD 和 MIMD 是空间并行机,而时间并行是指流水线技术
总线
I/O
中断向量地址是中断服务程序的入口地址的地址
中断响应由高到低的优先次序宜用:机器硬件故障→访管(陷入)指令→外部中断→重新启动
中断屏蔽标志的一种作用是实现中断升级,即改变中断处理次序,可以改变多个中断服务程序执行完的次序。注意是处理次序而非响应次序,响应次序是由硬件排队电路决定的。
CPU 对 DMA 的响应可以在指令执行过程中的任何两个存取周期之间
DMA 方式的数据传输不经过 CPU,但是需要经过 DMAC,即 DMA 的数据缓冲寄存器。
CPU 和 DMA 控制器同时要求使用存储器总线时,DMA的优先级最高,因为DMA请求得不到及时响应的话,I/O 传输数据可能会丢失。
题型:已知主频,DMA处理的时钟周期,传输速率,求用于传输的时间占CPU时间的比率问题。注意最后的问题,有的题是问DMA传输这个时间内,CPU参与的时间占比。二者的计算方法是不同的。



