本章沿两条主线展开:先自上而下认识计算机系统的抽象层次,理解"复杂性靠抽象来管理";再自底向上从二进制数制、数据表示、数字逻辑,一步步搭建出一台能执行程序的简单计算机 Simple-1。
一条主线:抽象分层理解 → 二进制数制 → 数据编码 → 数字逻辑 → 整机组成
计算机既是最复杂的系统,也是最简单的系统——复杂世界由 0 和 1 的二进制逻辑层层抽象而成。
计算机由数以亿计的晶体管、庞大的软件系统和复杂的人机交互组成,但本质上只遵循两个基本规则:0 和 1、开与关。管理复杂性的关键技术是抽象:通过隐藏底层细节,在不同层次上处理不同复杂度的问题。
CEO 的类比:战略层只关心各"业务板块"营收 → 管理层关心"部门"绩效 → 执行层分配任务 → 实施层处理具体事务。CEO 不需要知道每个员工的工作细节,就能掌控整个公司。
| 抽象层次 | 模块与元素 | 一句话说明 |
|---|---|---|
| 应用软件 | 电子游戏、浏览器 | 使用操作系统功能解决用户问题 |
| 操作系统 | 设备驱动程序等 | 管理底层抽象,如访问硬盘、管理存储器 |
| 体系结构 | 指令、寄存器 | 程序员视角的计算机抽象(如 x86) |
| 微体系结构 | 数据路径、控制器 | 用逻辑实现体系结构定义的指令 |
| 逻辑 | 加法器、存储器 | 用数字电路构造复杂结构 |
| 数字电路 | 与门、或门 | 电压限定在离散范围表示 0/1 |
| 模拟电路 | 放大器、滤波器 | 输入输出为连续电压 |
| 器件 | 晶体管、二极管 | 建立端子上电压与电流的关系模型 |
| 物理 | 电子 | 最底层抽象,由量子力学和麦克斯韦方程描述 |
任何语言的符号数量都有限——选取哪些符号、如何重复使用,就产生了各种位置化数字系统(数制)。
以 R 为基数、n 个整数位、m 个小数位的数 K,可按位权展开为多项式:
例:(1011.01)₂ = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ + 0×2⁻¹ + 1×2⁻² = 11.25D
| 数字系统 | 英文名 | 基数 | 基本符号 | 进位规则 |
|---|---|---|---|---|
| 十进制 | Decimal | 10 | 0…9 | 逢 10 进 1 |
| 二进制 | Binary | 2 | 0, 1 | 逢 2 进 1 |
| 八进制 | Octal | 8 | 0…7 | 逢 8 进 1 |
| 十六进制 | Hexadecimal | 16 | 0…9, A…F | 逢 16 进 1 |
| 转换 | 方法 | 要点 |
|---|---|---|
| 任意进制 → 十进制 | 按位权展开多项式并求和 | 例如 (456.7)₈ = 4×8²+5×8¹+6×8⁰+7×8⁻¹ = 302.875D |
| 十进制整数 → 二进制 | 除二取余法 | 不断除以 2 取余数,逆序输出(余数为最低位) |
| 十进制小数 → 二进制 | 乘二取整法 | 不断乘 2 取整数部分,顺序输出(达到所需精度即可停止) |
| 二进制 ↔ 八进制 | 三位一并 / 一分为三 | 以小数点为界分组,不足三位补零 |
| 二进制 ↔ 十六进制 | 四位一并 / 一分为四 | 以小数点为界分组,不足四位补零 |
| 八进制 ↔ 十六进制 | 以二进制为中介 | 先转二进制再转目标进制 |
例:111101001.11001B = 751.62Q = 1E9.C8H;23D = 10111B;0.8125D = 0.1101B
在计算机中,数据是一串包含 0 和 1 的二进制组合——数值、字符、音频、图像、视频都必须先"编码"成二进制才能被计算机识别和处理。
| 中文 | 简称 | 英文 | 字节数 | 近似值 |
|---|---|---|---|---|
| 位 | b | bit | 1/8 | 数据最小单位 |
| 字节 | B | Byte | 1 | 1B = 8b |
| 千字节 | KB | KiloByte | 2¹⁰ | ≈ 10³ |
| 兆字节 | MB | MegaByte | 2²⁰ | ≈ 10⁶ |
| 吉字节 | GB | GigaByte | 2³⁰ | ≈ 10⁹ |
| 太字节 | TB | TeraByte | 2⁴⁰ | ≈ 10¹² |
| 拍字节 | PB | Petabyte | 2⁵⁰ | ≈ 10¹⁵ |
补的直觉(时钟模型):把 8 点拨到 5 点,可逆拨 3 格也可顺拨 9 格——对模 12,−3 ≡ +9。只要确定"模"(n 位二进制的模为 2ⁿ),就可以用等价正数代替负数,把减法变成加法。
例:8 位下求 [50−30]补 → [50]补=00110010,[−30]补=11100010,相加得 00010100(进位丢弃)= 20 ✓
| 表示法 | 核心思想 | 优点 | 缺点 |
|---|---|---|---|
| 定点数 | 预先约定小数点位置(定点整数 / 定点小数) | 实现简单、计算速度快 | 表示范围有限、精度浪费 |
| 浮点数 | 小数点位置随数值大小浮动(借鉴科学计数法 N = M × Rᴱ) | 表示范围极大、灵活性高 | 实现复杂、存在舍入误差 |
8 位简化浮点模型:符号位 1 位 + 指数位 3 位(偏移 Bias = 2³⁻¹−1 = 3)+ 尾数位 4 位(隐含整数位 1,只存小数部分)。
工业标准 IEEE 754:单精度 float 32 位(1 符号 + 8 指数 + 23 尾数);双精度 double 64 位(1 + 11 + 52)。
例:"BYTE" 每个字符占 1 字节:B=42H、Y=59H、T=54H、E=45H,共 4 字节。例:U+77E5 在 UTF-8 中编码为 E7 9F A5(3 字节)。
音频数字化:采样(奈奎斯特定理:采样率 ≥ 最高频率 2 倍;CD 44.1kHz)→ 量化(位深度 8/16/24 位)→ 编码(PCM/DPCM)。
图像:位图由像素矩阵组成(分辨率 + 色彩深度决定质量,放大有锯齿);矢量图用数学公式描述(无限缩放不失真,适合标志/字体)。
视频:帧率(24/30/60fps)× 分辨率 × 色彩深度决定数据量;I 帧(独立帧)、P 帧(参考前帧)、B 帧(参考前后帧)通过帧间压缩消除时间冗余,可把数据量减少数十至数百倍。
计算机对二进制的处理最终由数字逻辑电路完成——理论源于布尔代数,物理实现是逻辑门。
真/假对应二进制 1/0、电路中的高/低电平。任何复杂逻辑运算都可以由三种基本运算组合而成:
| 运算 | 表达式 | 规则 |
|---|---|---|
| 与 AND | C = A · B | 所有输入为 1 才输出 1 |
| 或 OR | C = A + B | 只要一个输入为 1 即输出 1 |
| 非 NOT | B = Ā | 输出是输入的相反值 |
| 与非 NAND | C = A·B 取反 | 仅全 1 时输出 0 |
| 或非 NOR | C = A+B 取反 | 仅全 0 时输出 1 |
| 异或 XOR | C = A ⊕ B | 相同时输出 0,不同时输出 1(加法器核心) |
| 同或 XNOR | C = A ⊕ B 取反 | 相同时输出 1,不同时输出 0 |
| 操作 | 方法 | 示例(8 位) | 公式 |
|---|---|---|---|
| 复位(清 0) | 掩码目标位为 0、其余为 1,按位与 | 1011 1100 AND 1111 0000 = 1011 0000 | 原数 AND 掩码 |
| 置位(置 1) | 掩码目标位为 1、其余为 0,按位或 | 1011 0000 OR 0000 1111 = 1011 1111 | 原数 OR 掩码 |
| 翻转(取反) | 掩码目标位为 1、其余为 0,按位异或 | 1011 1100 XOR 1000 0000 = 0011 1100 | 原数 XOR 掩码 |
| 部件 | 功能 | 构成 |
|---|---|---|
| 半加器 | 两个 1 位二进制相加:S = A⊕B,C = A·B | 1 个异或门 + 1 个与门 |
| 全加器 | A、B 与低位进位 Cin 三者相加 | 2 个半加器 + 1 个或门 |
| 串行进位加法器 | n 个全加器级联;结构简单但进位逐级传递、速度慢 | n 个全加器 |
| 超前进位加法器 | 并行预计算所有进位,速度快但电路复杂、面积大功耗高 | 额外组合逻辑 |
| 译码器 Decoder | n 位输入 → 2ⁿ 个输出中唯一有效(如 2-4 译码器);典型应用:内存地址译码 | 2 个非门 + 4 个与门(2-4) |
| 多路选择器 MUX | 按选择信号从多路输入选一路输出(4 选 1:S₁S₀=00/01/10/11 选 I₀~I₃);CPU 中选寄存器送 ALU | 2-4 译码器 + 4 与门 + 1 或门 |
| 层级 | 内容 |
|---|---|
| 基础抽象 | 晶体管构成逻辑门(与、或、非) |
| 功能模块 | 逻辑门组合成半加器、全加器、译码器、多路选择器 |
| 核心部件 | 功能模块组成加法器、运算器(ALU) |
| 完整系统 | 运算器、控制器、存储器等组成完整计算机 |
一个简单 ALU 能进行加、减(补码加法)、逻辑与、逻辑或等操作——内部由加法器、逻辑门阵列和多路选择器构成,控制信号通过选择器决定当前执行哪种运算。
把表示数据的部件与实现运算的部件组合起来,构成一台最简单的存储程序式计算机——Simple-1。
编址方式:按字节编址(每字节唯一地址,n = ⌈log₂B⌉ 位;32MB 内存需 25 位地址)或按字编址(每字唯一地址,n = ⌈log₂(B/W)⌉ 位;128MB、字长 8B 需 24 位)。
| 存储器 | 特点 | 用途 |
|---|---|---|
| SRAM(静态 RAM) | 触发器保存数据,通电不刷新;快而贵 | 高速缓存 |
| DRAM(动态 RAM) | 电容存储,需周期性刷新;慢而便宜 | 主存 |
| ROM(MROM/PROM/EPROM/EEPROM) | 只读、非易失;可编程性与擦写能力逐级增强 | 开机程序等不可丢失内容 |
| 三组总线 | 作用与宽度 |
|---|---|
| 数据总线 | 传送数据,每根线每次 1 位;宽度取决于字长(32 位字长需 32 根) |
| 地址总线 | 寻址存储器的特定字;宽度取决于存储容量(2ⁿ 个字需 n 根) |
| 控制总线 | 传输读写等控制信息;宽度取决于控制命令数量(2ᵐ 条命令需 m 根) |
I/O 寻址两种方式:
| 方式 | 要点 |
|---|---|
| I/O 独立寻址 | 读写内存与读写 I/O 的指令不同(Read 101 读内存 / Input 101 读 I/O),I/O 地址可与内存地址重叠而不混淆 |
| I/O 存储器映射寻址 | 把 I/O 控制器每个寄存器看作内存存储字,指令集更小但 I/O 控制器占用一部分内存地址(5 控制器 × 4 寄存器 = 占 20 个字) |
指令格式:每条指令 16 位、分 4 个 4 位域;最左域为操作码,其余 3 个域为操作数或地址。16 条指令:HALT、LOAD、STORE、ADDI、ADDF、MOVE、NOT、AND、OR、XOR、INC、DEC、ROTATE、JUMP 等。
程序 5 条指令:LOAD R₀←M₄₀ → LOAD R₁←M₄₁ → ADDI R₂←R₀+R₁ → STORE M₄₂←R₂ → HALT。点击"下一步"逐周期观察 PC、IR、寄存器与内存的变化。
课上演示与课后拓展建议——先试官方与交互工具,再读原始资料。
在线十进制/二进制/八进制/十六进制互转,可随机出题自测数制转换。
拖拽搭建与门、或门、异或门等,直观观察真值表与组合电路。
从与非门开始一步步搭出加法器、ALU 甚至 CPU 的互动游戏,对应"从逻辑到运算器"。
《计算机系统的要素》配套课程:从与非门构建一台能运行程序的完整计算机。
冯·诺依曼结构、总线、存储层次等概念的扩展阅读与历史背景。
单精度/双精度浮点格式、特殊值(无穷、NaN)与舍入规则的权威说明。
完整 ASCII 编码表,十进制/十六进制/二进制对照,课堂查表演示。
以"二进制与数据表示"为主题的公开课视频,双语对照理解本章核心。