前言 : 补充视频有课本没有的内容

第一章 计算机系统概述

计算机系统层次结构

计算机系统的组成

  • 计算机体系结构与计算机组成的区别
    image

  • 计算机系统的基本组成
    image

计算机硬件

  • 冯 诺依曼计算机的特点
    1. 计算机由五大部分组成(输入/输出/运算/存储/控制 )
    2. 指令和数据 以同等地位放于 存储器 中 并 可按地址寻访
    3. 指令和数据以二进制表示(0,1)
    4. 指令由操作码和地址码组成
    5. 指令在存储器中顺序存放
    6. 机器以 运算器为中心 (现代计算机以 存储器为中心)
    7. 采用 “存储程序” 的工作方式

“存储程序” 的基本基本思想
将事先编制好的程序和原始数据送入主存后才能执行 一旦程序被启动执行 就无须操作人员的干预 计算机
会自动 逐条执行指令 知道程序结束

  • 冯诺依曼结构 - 现代计算机结构
    image

  • 现代计算机结构框图
    image

计算机工作过程

  1. 主存储器

    • 存储体M +各种逻辑部件 +控制电路
    • 按地址存取 有两个寄存器
    • MAR地址寄存器 MDR数据寄存器
  2. 运算器

    • 至少三个寄存器(下面三个) + 一个算术逻辑单元ALU
    ACC累加器 MQ乘商寄存器 X操作数寄存器
    加法 被加数 和 加数
    减法 被减数 差 减数
    乘法 乘积高位 乘数 乘积低位 被乘数
    除法 被除数 余数 除数
  3. 控制器

    • 神经中枢: 取指 分析 执行
  4. I/0 I/O设备以及相应接口

eg:
image

计算机的工作过程
以下面这段代码为例 模拟实现计算机的工作过程

1
2
3
4
5
int a=2,b=3,c=1,y=0;
void man()
{
y=a*b+c;
}

image
此时 (ACC)=2, (PC)=1;

image
此时 (MQ)=3, (X)=2,(ACC)=6, (PC)=2;

  • X操作数寄存器 一般存放被操作的数 a就为被乘数
  • MQ乘商寄存器 存放b(当需要MQ辅助存储: 用来存放乘法运算结果的低位)

image
此时 (ACC)=7;
image
此时 结果被送到y的地址
image
此时 分析出停机指令后 剩下的操作就交给操作系统相关指令了

以上需要自己理解 才能融会贯通
有许多步骤都是相同的你会发现
image

计算机性能指标

  • 机器字长 : 是指计算机进行一次整数运算所能处理的二进制数据的位数

    • CPU一次能处理数据的位数
    • 与CPU中的 寄存器位数 有关
    • 字长越大 数的表示范围 越大 精度 越高
    • 字长可影响机器的 运算速度
    • 字长对硬件 造价 有较大影响
    • 字长直接影响加法器或ALU, 数据总线, 存储字长的位数
  • 存储容量

    1. 包含 主存容量辅存容量
    2. 包含二进制信息的总位数
    3. 主存容量
      1. MAR反映存储单元个数
      2. MDR反映存储字长(可寻址范围的最大值)
        • 总容量 -> 存储单元个数*存储字长
  • 运算速度

    1. 影响因素: 机器主频, 执行的操作,主存速度
    2. 早期 使用完成一次加法或乘法所需的时间来衡量运算速度
    3. 衡量方式
      1. 主频 : 主时钟频率(f), 单位MHz, GHz CPU工作节拍受主时钟控制, 主时钟不断产生固定频率的时钟
      2. CPI :执行一条指令所需的时钟周期数 CPI=执行某段程序所需的CPU时钟周期数该程序所包含的指令条数CPI = \frac{执行某段程序所需的CPU时钟周期数}{该程序所包含的指令条数}
      3. MIPS :每秒执行多少百万条指令 MIPS=指令条数程序执行时间×106=时钟频率CPI×106MIPS = \frac{指令条数}{程序执行时间×10^6} = \frac{时钟频率}{CPI× 10^6}
      4. FLOPS :TFLOPS万亿次浮点操作每秒、PFLOPS千万亿次浮点操作每秒、EFLOPS 101810^18 次浮点操作每秒、ZFLOPS 102110^21 次浮点操作每秒
      5. 吞吐量 : 表征一台计算机在某一时间间隔内能够处理的信息量,单位 字节/秒(B/S)
      6. 响应时间 : 表征从输入有效到系统产生响应之间的时间度量,用 时间单位 来度量, 微秒(10^-6^S)、纳秒((10^-9^S)
      7. CPU时钟周期(T)︰主频的倒数称为CPU时钟周期,即T=1/f,单位 微秒、纳秒 (CPU中最小的时间单位 执行指令的每个动作至少需要1个时钟周期)
      8. CPU执行时间:执行一段程序所占用的CPU时间,CPU执行时间=CPU时钟周期数×CPU时钟周期长

第二章 数据的表示和运算

数码与编码

进位计数值以及其相互转换

任意进制转换成十进制

直接看公式会蒙圈 结合例子看
image

十进制转换成任意进制

采用 基数乘除法

  • 整数部分 :除基取余法
    • 注: 最先取得的余数为数的最低位
  • 小数部分 :乘基取整法
    • 注: 最先取得的整数为数的最低位

口诀:
除基取余, 先余为低, 后余为高
乘基取整, 先整为高, 后整为低
image

二进制转十六进制/八进制

8421法 比较简单

  • 八进制就凑三位
  • 十六进制凑四位

都是整数部分高位补0 小数部分低位补0

eg:
1111000010.01101
-> 八进制 : 001 111 000 010 . 011 010 即 1702.32
-> 十六进制 : 0011 1100 0010 . 0110 1000 即 3C2.68

十六进制/八进制 转二进制 反着来即可

八进制/十六进制之间的转换

简单方法 -> 先将八(十六)进制转换成二进制 再装换成十六(八)进制

真值和机器数

  • 真值 :数值数据的 实际值
  • 机器码 :数值数据在 计算机内的编码表示

定点数的表示和运算

  • 正数的原反补一样
  • 无符号数只有整数 不存在无符号小数

无符号数表示范围:
假设计算机是8位的 -> 0000 0000 ~ 1111 1111 -> 0~255
所以 8位无符号数: 0~2^8^-1
—> n位置无符号数: 0~2^n^-1

思考

如果我们不采用无符号数 那么能表示的数据范围就会发生改变 其实真正表示数据的是不是就只有7位了 还有一个符号位

是不是数据的个数就会变少了呢?

答案 并不会
例如 4位
无符号: 0000~1111表示0~15 —> 16个数
有符号: 1111~0111表示-7~7 —>15 个数
几乎可以不计


  • 原码->补码的快捷方式 : 自右往左第一个 1 之后不动,之前取反(数值位) 即可

原码

定点整数
  • 原码表示: 若机器字长n+1位, 则位数为n位, 原码整数表示范围: -(2^n^-1)≤ X≤ (2^n^-1)
    • 正数: 2^n^-1个
    • 负数: 2^n^-1个
    • 零 : 一个
    • 共计: 2^n+1^-1个
      解析:
      0的的原码整数在计算机内部有两种表示形式 +0和-0 -eg-> 0000 000 和 1000 0000
      共计 (2^n^-1)+(2^n^-1)+1 = 2^n+1^-1个

注意
机器字长n+1位 能表示数据的个数是 2^n+1^个(状态)
但是又因为0又两种表示方式 正好占用两种状态 反过来印证为什么0需要两种表示方式

定点小数
  • 原码表示: 若机器字长n+1位, 则位数为n位, 原码整数表示范围: -(1-2^-n^)≤ X≤ (1-2^-n^)

解析 : 0.0000 0000 ~ 0.1111 1111
—> 给0.1111 1111 + 0.0000 0001 就是1 所以他就等于 1-2^8^

在这里真值0的的原码整数在计算机内部也有两种表示形式

对称

原码的定点整数和定点小数的分布是关于原点对称的

反码

符号位不变 数值位取反

  • 整数表示范围 : -(2^n^-1)≤ X≤ (2^n^-1)
  • 小数表示范围 : -(1-2^-n^)≤ X≤ (1-2^-n^)
  • 真值0 : 无论小数还是整数都占用两种状态
  • 两种表示形式: +0 -> 0,000 0000 -0->1,111 1111

补码

负数: 补码就是原码取反加1

原码也可以由 补码取反加1得到

假设机器字长 8位

这里不一样的是 真值0的补码 只有一种表示形式 +0和-0的补码 都为0,000 0000
多出一个 1,000 0000
所以 相同n+1位 补码会比原码反码多一个数

  • 整数表示范围: -2^n^ ≤ X ≤ (2^n^-1)
    • 规定 : 补码整数1,000 0000 = -2^7^ (机器字长n+1时,就等于-2^n^ )
  • 小数表示范围: -1 ≤ X ≤ (1-2^-n^)
    • 规定 : 补码小数 1.000 0000 = -1 (机器字长n+1时,还等于 -1 )

移码

表示:

  • 方法一: 补码的基础上符号位取反
  • 方法二: 真值的基础上加2^n^ (n就是真值数值位的位数)

若机器字长n+1位 则尾数尾n位

p30

运算方法

定点数的移位运算

算数移位

  • 正数补码算术移位:(和原码完全相同)

符号位不变 操作数值位
右移 :高位补0 低位舍弃
左移 : 低位补0 高位舍弃

  • 负数补码算术移位:

符号位不变 操作数值位
右移(同反码) :高位补1 低位舍弃
左移(同原码) : 低位补0 高位舍弃

逻辑移位

  • 无论什么数

右移 :高位补0 低位舍弃
左移 : 低位补0 高位舍弃

循环移位

看图吧 : 主要注意不带进位位的时候更新问题
image

定点数的加减运算

原码加减法

比较简单
注意一点 : 符号位不参与运算
image

补码加减法

补码运算的特点

  1. 按二进制位运算规则运算 逢二进一
  2. 加法, 两数补码直接相加; 减法, 则将被减数和减数的机器负数相加;
  3. 符号位与数值位一起参与运算! (加减运算的符号位也在运算中直接得出)
  4. 符号位产生的进位要丢掉 保留n+1位 运算结果也是补码
  5. [X±Y]~补~ = [X\]~补~ ± [Y]~补~ (mod2)

[Y] 补 >[Y] 补 [Y]~补~ ---> [-Y]~补~ : 连同符号位和数值位取反加1 (简法: 从右向左第一个1左侧取反其他不变 这次包括了符号位)


看图即可 比较简单

image

移码加减法

先复习移码的特点
image

注意最后一条特点!!!

运算

image

做题

image

溢出判断

了解
image

小插曲
image

逻辑表达式
image

常见的判别方法有三种

  1. 符号比较法
  2. 双进位法
  3. 双符号位法
  • 采用一位符号位
    image

  • 采用符号位和进位

看图即可
image

注:

  1. 异或 : 相同为0, 不同为1
  2. 是进位, 不是看最后是多少, 是进了多少!
  • 采用双符号位

{abcd}\begin{Bmatrix} a & b \\ c & d \end{Bmatrix}

abcd\begin{matrix} a & b \\ c & d \end{matrix}

$ 1^22 $

CPI=执行某段程序所需的CPU时钟周期数该程序所包含的指令条数CPI = \frac{执行某段程序所需的CPU时钟周期数}{该程序所包含的指令条数}

定点数的乘除运算

原码一位乘

image
image
image
image
image

补码一位乘

image
image
image
image

原码一位除

image
image
image
image

补码一位除

image
image

浮点数的表示与运算

浮点数的表示

浮点数的表示格式

image

浮点数的表示范围

image

浮点数的规格化

https://git.poker/CoisiniZz/images/blob/main/jzyl/image.5gqtsig2o740.webp?raw=true

IEEE754标准