计算机组成原理(408考研)
4
2
为什么间接寻址相对直接寻址可扩大寻址范围
假设:
计算机的 指令字长16位,其中 地址字段占8位(直接寻址时)。
存储器的 地址总线宽度为16位(即最大寻址范围是64KB)。
内存单元存储的数据宽度也是 16位(即每个单元能存一个地址)。
- 直接寻址的局限性
若采用直接寻址,地址字段仅8位,可直接寻址的范围是 2⁸ = 256个单元(如0x00~0xFF)。
这远小于存储器实际的64KB(16位地址)范围,造成了浪费。
- 间接寻址的解决方式
间接寻址的地址字段(8位)不直接表示操作数地址,而是指向一个内存单元,该单元中存储了 完整的16位操作数地址。
例如:
指令中的地址字段为 0x40(8位)。
CPU先访问内存单元 0x40,读取其中存储的 16位地址(如 0xA010)。
最终操作数位于 0xA010(16位地址,突破了8位限制)。
3
x86架构与ARM架构
特性 x86 ARM
指令集 CISC(复杂指令) RISC(精简指令)
功耗 较高(性能优先) 较低(能效优先)
主导领域 PC、服务器、高性能计算 移动设备、嵌入式、IoT
生态 Windows/Linux主流 Android/iOS主导
cmp v.s. test
CMP vs TEST 核心区别
指令 底层操作 主要用途 影响的关键标志位
CMP OP1 - OP2 比较数值大小 ZF, CF, SF, OF
TEST OP1 & OP2 检查位模式或判断零值 ZF, SF
- cmp
关键标志位:
ZF=1:两数相等(OP1 == OP2)。
CF=1:无符号数 OP1 < OP2。
SF≠OF:有符号数 OP1 < OP2。
- test
ZF=1:结果为零(所有位按位与后为0)。
SF=1:结果的最高位为1(负数)。
概述:
计算机系统导论
层次结构
硬件层次
冯诺依曼思想
五大组成硬件
软件层次
分为系统软件与应用软件
三个级别的语言、各种翻译程序的概念、翻译的四个阶段
计算机系统层次结构
性能指标
数据表示与运算
不同进制数之间的转换
原码、反码、补码、移码之间的表示与转换
运算方法与运算电路
带标志加法器、算数逻辑单元、加减运算电路、乘法运算电路、除法运算电路
定点数的移位、加减、乘除运算
浮点数的表示与运算
计算机系统的层次结构
层级 | 名称 | 关键功能 | 记忆口诀 |
---|---|---|---|
M4 | 高级语言层 | 程序员编写的代码(如 C、Python),需编译成下层语言。 | “写代码“ |
M3 | 汇编语言层 | 将高级语言编译为汇编指令(如 MOV AX, 5 ),再翻译为机器码。 |
“翻译成汇编“ |
M2 | 操作系统层 | 用机器语言实现操作系统功能(如进程调度、内存管理)。 | “OS 干活“ |
M1 | 传统机器语言层 | CPU 直接执行的二进制指令(如 10110000 ),是软硬件分界线。 |
“硬件能懂“ |
M0 | 微程序机器层 | 用微指令(更低级的控制信号)解释机器指令,由硬件直接执行。 | “硬件细节“ |
汇编语言与机器语言在ARM与x86上的表现
操作 | x86 汇编指令 | x86 机器指令(二进制) | ARM 汇编指令 | ARM 机器指令(二进制) |
---|---|---|---|---|
将 5 存入寄存器 | MOV AL, 5 |
10110000 00000101 |
MOV R0, #5 |
1110001110100000 00000101 |
加法(寄存器+1) | ADD AX, 1 |
00000100 00000001 |
ADD R0, R0, #1 |
1110000010000000 00000001 |
关键点:
- x86:变长指令(1~15 字节),复杂寻址模式,兼容性强。
- ARM:定长指令(4 字节),精简指令集(RISC),能效高。
- 同一操作在不同架构下的机器码和汇编指令完全不同,这是系统结构的影响
数据通路宽度
指CPU内部一次能处理的二进制位数,即ALU(算术逻辑单元)和寄存器之间的数据传输位数。ALU位数通常等于机器字长
机器字长一般与CPU中通用寄存器的位数有关
通用寄存器:CPU中用于暂存数据和地址的存储单元,其位数通常等于机器字长。
- 示例:
32位CPU的通用寄存器(如EAX)是32位。
64位CPU的通用寄存器(如RAX)是64位。
对用户透明/不透明的寄存器(无需/需要程序员直接操作)
- 对用户透明的寄存器
- 指令寄存器(IR)
存储当前正在解码的指令,完全由硬件控制。
- 对用户不透明的寄存器
- 通用寄存器(如x86的EAX、ARM的R0-R12)
存储运算数据或地址,程序员需显式使用(如MOV EAX, 5)。
- 状态寄存器(FLAGS / CPSR)
包含条件码(零标志、进位标志等),程序员需通过分支指令(如JZ)或显式读写(如PUSHF)来使用。
- 特殊情况
**程序计数器(PC)**的透明性:分场景讨论
- 大多数情况下透明(由硬件自动管理)
普通顺序执行:CPU自动递增PC,程序员无需干预。
- 特定情况下不透明(程序员需显式操作)
汇编编程:直接通过指令修改PC(如x86的JMP、ARM的BX)。
周期的差异与比较
周期类型 | 定义 | 组成关系 | 典型场景 | 示例 |
---|---|---|---|---|
时钟周期 | CPU时钟信号的一个完整振荡周期(CPU频率倒数) | 最小单位时间 | 所有硬件同步操作的基础 | 2GHz CPU → 时钟周期=0.5ns |
CPU周期 | 完成一个基本操作的时间(如取指、执行) | 1个CPU周期 = 多个时钟周期 | 非流水线CPU的指令分阶段执行 | 取指周期=4时钟周期,执行周期=3时钟周期 |
指令周期 | 执行一条完整指令所需的时间 | 1个指令周期 = 取指+解码+执行+访存+写回 | 衡量CPU处理单条指令的速度 | 简单指令CPI=1,复杂指令CPI>1 |
中断周期 | 处理硬件/软件中断请求的完整流程时间 | 中断周期 = 保存现场+执行中断服务程序+恢复现场 | 外设请求、异常处理 | 键盘输入触发中断,耗时约10-100时钟周期 |
机器周期 | CPU执行一条指令所需的基本时间单位,通常由多个时钟周期(Clock Cycles)组成 | 一个机器周期包含以下阶段:取指、译码、执行、访存、写回 |
计算机中,CPU 的 CPI 与下列(A)因素无关。
A. 时钟频率B. 系统结构C. 指令集D. 计算机组织
RISC(精简指令集)通常 CPI 较低(接近 1)。CISC(复杂指令集)某些指令可能需要多个周期(CPI > 1)。
CPI 取决于 CPU 的架构、指令集和微架构优化,但与时钟频率无关。时钟频率影响的是 指令的执行速度(时间),而不是 每条指令所需的周期数(CPI)。
0的表示
1. 原码(Sign-Magnitude)
- +0:
00000000
(最高位0
表示正,其余位为数值0
) - -0:
10000000
(最高位1
表示负,其余位为数值0
) - 特点:原码有 +0 和 -0 两种表示。
2. 反码(Ones’ Complement)
- +0:
00000000
(与原码相同) - -0:
11111111
(负数的反码是对其绝对值的原码逐位取反) - 特点:反码也有 +0 和 -0 两种表示。
3. 补码(Two’s Complement)
- +0:
00000000
(与原码相同) - -0:补码规定 0 只有一种表示,即
00000000
,而10000000
表示 -128(8位补码的最小值)。 - 特点:补码 没有 -0,使得表示范围比原码和反码多一个数(-128)。
4. 移码(Excess-K,通常用于浮点数阶码)
- 移码 = 真值 + 偏移量(通常 ( K = 2^{n-1} ) 或 ( 2^{n-1}-1 ))
- 以 偏移量 ( K = 128 )(8位移码)为例:
- +0:
0 + 128 = 128
→10000000
- -0:
-0 + 128 = 128
→10000000
- +0:
- 特点:移码 没有 +0 和 -0 的区别,统一表示为
10000000
。 - 王道计组2-1-5-24
“当且仅当” 的含义
A ⇔ B(A 和 B 完全等价)
在逻辑和数学中,“当且仅当”(if and only if,缩写为 iff)表示 两个命题在逻辑上完全等价,即:
- 如果 A 成立,那么 B 一定成立(A ⇒ B)
- 如果 B 成立,那么 A 也一定成立(B ⇒ A)
CF中的Cout
- 加法时:最高位产生进位:Cout = 1
- 减法时:最高位不够减,借一:Cout=0
- Cout异或Sub = CF
- CF只对无符号数有意义
- 关于2的理解:计算 000 - 111(3位无符号数)
计算过程(用补码实现减法):
减法 A - B 可通过 A + (−B) 完成,其中 −B 用 二进制补码 表示:求 B(111)的补码(即 -B):按位取反:111 → 000
加 1:000 + 1 = 001(-7 的补码)。计算 000 + 001 = 001(直接相加,无进位,则Cout=0)。
关键点:补码减法的 Cout 需要额外判断。
乘法运算电路中的控制逻辑
注:第三步为判断
Y[0]=0
.
运算器的组成
王道P206