3. 计算机组成原理 笔记

1 进位记数制

  • 数据表示
    • 日常生活中的时间表示
      • 60 秒 = 1 分钟;60 分钟 = 1 小时
      • 进位规则:逢十进一
    • 二进制数
      • 基数:2
      • 数元:0, 1
      • 进位规则:逢二进一
      • 用 0 和 1 表示晶体管的导通和截止状态
    • 二进制数的表示方法
      • 权重表示:“A = A0 * R^0 + A1 * R^1 + …”
      • 真值计算:通过奇数权重展开式求得
  • 数制转换
    • 十进制
      • 基数:10
      • 数元:0-9
      • 进位规则:逢十进一
    • 八进制
      • 基数:8
      • 数元:0-7
      • 进位规则:逢八进一
    • 十六进制
      • 基数:16
      • 数元:0-9, A-F(代表十进制的 10-15)
      • 进位规则:逢十六进一
  • 数值表示对照表
    • 十进制、二进制、八进制和十六进制之间的转换
      • 十进制 15 的表示
        • 二进制:1111
        • 八进制:17
        • 十六进制:F
    • 数制标识
      • 二进制:2 或 B
      • 八进制:8 或 O 或 Q
      • 十六进制:16 或 H
  • 计算机内部数据表示
    • 使用二进制的原因
      • 简化硬件强度
      • 易于晶体管的导通和截止状态表示
    • 二进制数的优缺点
      • 优点:简化运算和存储
      • 缺点:长串难以记忆和直观
    • 方便阅读和书写的数制
      • 八进制和十六进制
      • 与二进制有简单对应关系,易于转换

2 数制之间的相互转换

  • 二进制与十进制的转换
    • 二进制转十进制
      • 方法:按照基数权重展开
      • 例子:二进制数 111 转换为十进制数 7
    • 十进制转二进制
      • 方法:除二取余法
      • 例子:十进制数 82 转换为二进制数 1010010
  • 二进制与八进制的转换
    • 二进制转八进制
      • 方法:每三位二进制数转换为一个八进制数
      • 例子:二进制数 100111 转换为八进制数 47
    • 八进制转二进制
      • 方法:每个八进制数转换为三个二进制数
      • 例子:八进制数 175.2 转换为二进制数 11110101.010
  • 二进制与十六进制的转换
    • 二进制转十六进制
      • 方法:每四位二进制数转换为一个十六进制数
      • 例子:二进制数 1001110 转换为十六进制数4E
    • 十六进制转二进制
      • 方法:每个十六进制数转换为四个二进制数
      • 例子:十六进制数 6B4 转换为二进制数 11010110100
  • 十进制与十六进制的转换
    • 十进制转十六进制
      • 方法:除十六取余法
      • 例子:十进制数 300 转换为十六进制数 12C
    • 十六进制转十进制
      • 方法:按照基数权重展开
      • 例子:十六进制数 EAF 转换为十进制数 431

3 整数的机器数表示

  • 基本概念
    • 数值型数据:具有大小正负之分,可用于加减乘除运算,如银行存款、学生成绩等
    • 非数值型数据:无正负大小之分,包括英文字母、标点符号等
    • 二进制数串:所有数值型数据在计算机中均以二进制数串表示
  • 数值型数据表示
    • 整数和浮点数
      • 整数:无小数部分的数值
      • 浮点数:包含小数部分的数值
  • 二进制表示
    • 机器字长:决定二进制数串能表示的数值范围
    • 无符号数与有符号数
      • 无符号数:仅表示非负数值
      • 有符号数:能表示正负数值
  • 有符号数表示方法
    • 原码
      • 正数:符号位为 0,其余位表示数值
      • 负数:符号位为 1,其余位表示数值
    • 反码
      • 正数:与原码相同
      • 负数:正数的按位取反
    • 补码
      • 正数:与原码相同
      • 负数:正数的反码末位加 1
    • 移码
      • 通过将补码的符号位取反得到,主要用于表示浮点数的指数部分。
  • 补码的优点
    • 简化运算:补码表示使得加减运算可统一为加法运算,简化了硬件设计
    • 唯一表示零:补码中零的表示是唯一的,消除了原码和反码中零有正零和负零两种表示的问题
  • 位运算与进位处理
    • 补码运算中,最高位的进位会被无条件丢弃,从而简化了运算过程
    • 对于负数的运算,通过补码可以更方便地进行加减运算转换
  • 应用场景
    • 补码:广泛用于整数的存储和运算,简化了计算机硬件设计
    • 移码:主要用于浮点数的指数表示,方便判断指数的大小

4 含小数信息的机器数表示

  • 浮点数基本概念
    • 定义:小数部分不为零的数值,用浮点数格式表示
    • 科学计数法:表示为 A × 10^N 的形式,其中 A 是 1 到 10 之间的实数,N 是指数
  • 二进制表示
    • 二进制科学计数法:N = 2^E × S,其中 E 是二进制整数,S 是二进制尾数
    • 表示方法:二进制数通过指数形式表示,便于处理大或小数值
  • 浮点数的组成
    • 尾数部分:包含尾符和尾数,尾数表示数值的精度
    • 指数部分:包含阶码和阶符,阶码表示指数大小,决定小数点的位置
  • 规格化表示
    • 规格化:尾数部分为纯小数形式,最高位为 1,提高表示精度
    • 特点:确保浮点数的表示唯一性,充分利用尾数的有效位数
  • 内部表示方法
    • 尾数:用原码表示,负数用1表示,添加必要的0来填充位数
    • 指数:用补码表示,正数的补码和原码相同。
  • 格式化与非规格化表示
    • 规格化表示:保证了最高的精度和范围,尾数的最高位为 1
    • 非规格化表示:不保证最高位为 1,精度较低

总结
浮点数的计算机内部表示需通过规格化处理,将数值转换为指数形式,然后对尾数和指数分别进行编码。
规格化表示可以提高数据的表示精度和范围,合理分配阶码和尾数位数。

5 BCD 格式表示法

  • 引入 BCD 编码的原因
    • 计算机内部使用二进制,而人们习惯于十进制
    • 大批量数据处理时,十进制到二进制的转换降低效率
    • 需要计算机直接处理实际值以提高数据处理效率
  • BCD 编码概念
    • BCD 码定义:用四位二进制数表示一位十进制数
    • 例子:十进制数 38,用 BCD 编码为 0011 和 1000 的组合
    • BCD 编码的特点
      • 每个十进制位用四位二进制表示
      • 16 种排列组合中选取十种表示 0-9
      • 不同的编码方法,如 8321、2421、5211 等
  • BCD 编码的种类
    • 带权码和无权码
      • 带权码:8421、2421 等,权重分别代表其值
      • 无权码:余三码、格雷码等,权重不直接影响值
    • 计算BCD码的值
      • 按位计算权重乘以位值后相加
      • 示例:1001 在 8421 编码中代表 9,在 5421 编码中代表 6
  • BCD 编码转换示例
    • 将十进制数转换为 BCD 编码
      • 例子:75.4 转换为 8421 编码
      • 方法:分别查找每个十进制数字的 BCD 编码,然后组合
  • BCD 编码的优点
    • 快速识别十进制和二进制之间的转换
    • 提高处理大批量数据时的效率

6 算术运算

  • 算术运算
    • 整数加减
      • 补码实现:补码运算规则简单,符号位参与运算
      • 运算规则:加法 - 直接加补码;减法 - 减数补码加被减数,变成加法
      • 示例:X=10, Y=14; X+Y=24, X-Y=-4
    • 移位运算
      • 算术左移:所有位向左移一位,最高位补零,相当于乘以 2
      • 算术右移:所有位向右移一位,最低位丢弃,最高位补符号位,相当于除以 2
      • 示例:28 的补码左移一位得到 56;右移一位得到 14
  • 逻辑运算
    • 与、或、非、异或、同或以及逻辑移位
      • 逻辑运算不涉及补码,直接进行位运算
      • 逻辑移位不改变数值,只改变表示形式
  • 补码运算
    • 补码定义:表示负数的二进制表示方法,使得加减运算简单化
    • 补码运算规则:简化运算过程,符号位和数值位一起参与运算
    • 补码求原码方法:根据补码的符号位判断正负,正数补码=原码;负数通过补码求原码的运算方法得到真值
  • 硬件实现
    • 算术逻辑单元(ALU):完成算术运算和逻辑运算
      • 加减乘除和算术移位运算
      • 通过补码进行加减运算简化了硬件设计

7 运算溢出及判断

  • 运算溢出的基本概念
    • 计算机表示数的范围受机器字长限制
      • 8 位字长最大值:127
      • 16 位字长最大值:32767
      • 一般范围:负的 2 的(N-1)次方到 2 的(N-1)次方减 1
    • 溢出定义:算术运算结果超出字长所能表示的范围
  • 溢出判断方法
    • 加法运算溢出判断
      • 两个正数相加得到负数或两个负数相加得到正数,表示溢出
      • 一正一负整数相加永远不会溢出
    • 移位运算溢出判断
      • 负数移位后变成正数或正数移位后变成负数,表示溢出
  • 双符号位法判断溢出
    • 双符号位表示:00 表示正数,11 表示负数
      • 溢出判断:
        • 如果运算结果的两个符号位不同(如 10 或 01),则发生溢出
        • 上溢:若双符号位为 01,表示运算结果为正数,但超出了最大表示的正数
        • 下溢:若双符号位为 10,表示运算结果为负数,但小于最小表示的负数
  • 实例分析
    • 示例 1
      • 机器字长为 8 位,X=89,Y=54
        • 补码计算 X+Y 结果的符号位为 1,表示溢出
        • 实际值应为 143,超出8位字长最大值 127
    • 示例 2
      • 机器字长为 8 位,X=-89,Y=-54
        • 初始双符号位为 11
        • 运算结果的双符号位为 10,表示发生下移溢出
        • 运算结果-143,超出8位字长最小负数 -128
    • 示例 3
      • 机器字长为 8 位,X=-80
        • 双符号位表示 11
        • 算术左移一位后,符号位变成 10,表示发生下溢
        • 结果 -160,超出 8 位最长补码所表示的最小负数 -128
  • 溢出处理
    • 发生溢出时,运算结果不正确,需要计算机进行异常处理

8 逻辑运算

  • 逻辑运算基本概念
    • 逻辑假与逻辑真
      • 零称为逻辑假
      • 一称为逻辑真
  • 逻辑运算类型
    • 逻辑与(逻辑乘)
      • 运算规则:两个逻辑数都为真时,结果为真
    • 逻辑或(逻辑加)
      • 运算规则:两个逻辑数中有一个为真时,结果为真
    • 逻辑非(逻辑取反)
      • 运算规则:逻辑数取反,即 0 变 1,1 变 0
    • 逻辑异或
      • 运算规则:两个逻辑数不同时,结果为真
    • 逻辑同或
      • 运算规则:两个逻辑数相同时,结果为真
    • 逻辑移位运算
      • 包括逻辑左移和逻辑右移
        • 逻辑左移:所有位左移,最高位被覆盖,最低位补 0
        • 逻辑右移:所有位右移,最低位被覆盖,最高位补 0
  • 逻辑运算与算术运算的区别
    • 算术运算
      • 数据有正负大小之分
      • 进行整体处理,运算时可能产生进位
    • 逻辑运算
      • 数据没有正负大小之分
      • 各位之间相互独立进行运算,不会产生进位
  • 逻辑运算例子
    • 计算两个二进制数的逻辑与、逻辑或、逻辑异或和同步的结果
    • 计算一个二进制数的逻辑非、逻辑左移和逻辑右移的结果

9 ASCII 编码

  • 字符编码概述
    • 定义: 将非数值型数据(如字母、数字、标点符号等)转换为二进制格式的过程,以便计算机能够识别、存储、传输和处理这些数据
    • 编码方案: 指为每个字符指定一个唯一的二进制数串的规则,如 ASCII 和 Unicode 编码
  • ASCII 编码
    • 简介: 美国标准信息交换编码的缩写,最初为美国标准,现国际通用
    • 特点
      • 单字节字符编码方案,主要应用于英文字母、数字及标点符号的表示
      • 分为标准 ASCII 码和扩展 ASCII 码
    • 标准 ASCII 码
      • 使用 7 位二进制数,覆盖 128 个符号(0 到 127)。
      • 包含所有大写英文字母、0 到 9 的数字、各种标点符号及95种可显示符号。
    • 扩展 ASCII 码
      • 使用 8 位二进制数,可编码 256 个符号
      • 前 128 种代码与标准 ASCII 码相同,后 128 种代码通常用于特殊符号和其他语言字符
    • 控制字符: 代码 0 到 31 以及 127 是控制字符,如换行符(代码10)、回车符(代码13),通常无法显示
    • 编码规律
      • 数字 0 到 9 的 ASCII 码依次递增。
      • 大写字母 A 到 Z 的 ASCII 码依次递增。
      • 小写字母 a 到 z 的 ASCII 码依次递增,且大写字母的 ASCII 码小于小写字母

总结:
ASCII 编码是计算机科学中广泛使用的编码方案,尤其是对于西文字符的表示。
理解 ASCII 编码对于学习计算机处理文本数据非常重要。

10 Unicode 编码

  • 编码方式
    • UCS-4
      • 使用四个字节编码,覆盖所有可能的字符。总体是一个四维编码空间
      • 整个空间有 128 个组
      • 每个组有 256 个平面
      • 每个平面 256 行 x 256 列。每个代码点可编码一个符号,基于四个字节表示。
    • UCS-2
      • 基本多语言平面 (BMP):第零组的第零个平面,编码了常用文字、标点和图形符号
      • 对 UCS-4 的BMP 平面去掉前面 2 个字节就能得到 UCS-2
      • 使用两个字节编码,适用于大部分常见字符
  • 实现方式
    • UTF-8
      • 以字节为单位编码,不同范围的字符使用不同长度的编码
      • 对于 00 到 7F 之间的字符,与 ASCII 相同
    • UTF-16
      • 以 16 位无符号数为单位,对 BMP 符号的编码
      • 针对字节序列的不同,有 UTF-16BE 和 UTF-16LE 两种实现方式
    • UTF-32
      • 以 32 位无符号数为单位,较少使用因占用空间大。
      • 有 UTF-32 BE 和 UTF-32 LE 两种实现方式。
    • 字节序问题
      • 在多字节编码中,字节的顺序有两种:大端序(BE)和小端序(LE)
      • UTF-8 无字节序问题,UTF-16 和 UTF-32 需要明确字节序
  • 转换格式
    • 字节序标记 (BOM)
      • 用于区分字节序,FEFF 表示大端序,FFFE 表示小端序
    • 应用
      • UTF-8、UTF-16 和 UTF-32 的广泛使用
      • 交易信息时需明确对方的字节序

总结:Unicode 编码是为全球文字和符号制定的统一编码方案,通过不同编码方式和实现方式,满足了跨语言、跨平台的文本处理需求。
UTF-8 和 UTF-16 是目前最广泛使用的转换格式,而 UTF-32 因占用空间大而较少使用。
字节序问题是处理多字节编码时需要特别注意的点,通过字节序标记(BOM)可以解决这一问题。

11 汉字编码

  • 汉字编码系统

    • 汉字信息处理流程
      • 输入、存储、编码、传输、输出
    • 汉字编码类型
      • 输入码
        • 区域输入法
        • 字形输入法
        • 拼音输入法
        • 混合输入法
      • 字形码
        • 点阵表示方式
          • 特点:图形方式存储汉字,如 16x16、24x24、48x48 点阵
          • 存储:占用更多空间,放大后质量下降
        • 矢量式
          • 特点:记录笔画信息,如坐标、半径、弧度等
          • 存储:占用空间小,可任意缩放
      • 机内码:当采用某种输入编码将汉字输入到计算机后,在计算机内部需要用二进制数来存储汉字
  • 区位码:区位码是一个四位的十进制数,前两位是区号,后两位是位号。例如,“万”字的区位码为 4582,其中 45 为区号,82 为位号

  • 国标码(国家标准与编码)

    • 定义 国标码是汉字编码的标准形式,由 4 位十六进制数组成。
    • GB2312
      • 由中国国家标准总局 1980 年发布,GB 即国标
      • 国标码是汉字编码的标准形式,由 4 位十六进制数组成。
      • 编码数量:6763 个汉字,682 个图形字符
      • 编码方法:使用两个字节表示,最高位为 0
      • 编码区域:94 个区,每个区 94 个位
    • GBK,Chinese Internal Code Specification,即汉字内码扩展规范,K 为汉语拼音“扩”字的声母,于 1995 年 12 月发布的汉字编码国家标准
    • GB 18030
      • 国家标准 GB 18030-2005,是中国目前最新的内码字集,于 2000 年 3 月发布的汉字编码国家标准
      • 存储时可能占用 2 个字节或 4 个字节
    • 区位码与国标码的关系
      • 国标码 = 区位码的 16 进制 + 20H
      • 加 20H 的原因:避免与 ASCII 控制字符冲突
  • 机内码

    • 定义
      • 机内码是计算机内部使用的编码形式。通常用两个字节表示一个汉字,每个字节的最高位为 1
    • 与国标码的区别
      • 机内码 = 国标码 + 80H
    • 实际应用
      • 文件存储时,英文字母保存为 ASCII 码,每个汉字保存为其机内码,两个字节表示
  • 汉字编码转换示例

    • “宝”字
      • 区位码:17, 3 -> 11H, 03H
      • 国标码:31H, 23H
      • 机内码:B1H, A3H

12 数据校验编码

  • 定义及必要性
    • 数据校验编码定义:在数据处理、传输、存储过程中,为发现并纠正错误,对要传输的数据按某种规则进行编码,使编码后的数据具备检测甚至更正错误的功能
    • 必要性:数据在处理、传输及存储过程中易出错,校验编码用于提高数据可靠性
  • 常用的校验编码方法
    • 校验码
      • 基本概念:校验码是基本的校验编码统称,通过增加一位额外的校验信息来检测错误
      • 种类:
        • 奇偶校验码:通过保证序列中 “1” 的个数为奇数或偶数来校验错误
      • 应用:广泛应用于计算机存储器的读写校验,以及单个 ASCII 码字符的传输校验。
    • 循环冗余校验码(CRC)
      • 原理:基于除法和余数的原理,用一个多项式去除整个数据块得到的余数作为校验码
      • 应用:在表面存储器(如硬盘、磁带)和计算机高速通讯领域广泛应用。
    • 海明校验码
      • 提出:由海明在 1950 年提出
      • 特点:能检测出两位同时出错或更多错误,但无法自动进行纠错
      • 编码复杂性:将校验位和有效信息进行分组编码,过程较复杂

总结:数据校验编码技术对传输的数据加入某个规则进行编码,使编码后的数据具备检测甚至更正错误的功能,以提高数据传输的可靠性。
常用的校验编码方法包括:校验码、循环冗余校验码(CRC)、海明校验码,每种方法都有其特点和应用场景。