参考文献

  • 王道计算机组成原理

冯诺依曼模型

  • 输入设备;
  • 输出设备;
  • 内存;
  • 中央处理器;
  • 总线。

计算机的功能部件

  • 输入设备
  • 输出设备
  • 存储器
    • 主存储器: 内存储器,CPU能直接访问
    • 辅助存储器: 外存储器,协助主存储器记忆更多的信息,辅助存储器的信息需要导入到主存储器中,才可以被CPU访问
  • 运算器
    • 是计算机的运算单元,用于算术运算和逻辑运算
    • 运算器的核心单元是算术逻辑单元(ALU)
  • 控制器
    • 控制器是计算机的指挥中心,有其指挥各部件自动协调第进行工作,现代计算机将运算器和控制器集成到一个芯片上,合成为中央处理器,简称CPU。有程序计数器(PC)、指令寄存器(IR)和控制单元(CU)

主机

  • 主机: 主存,运算器,控制器
  • 工作流程:
    • 指令,数据存入主存,PC指向第一条指令
    • 从主存中读取指令放入IR中,PC自动加一,CU分析指令,CU指挥其他部件执行指令

主存

  • 存储体: 存储元,存储单元,存储字,存储字长,地址
  • MAR(Memory Address Register): 地址寄存器,用于指明要读/写哪个存储单元.其位数反映存储单元数量
    • 存放欲访问的存储单元地址
    • MAR=4位: 总共有$2^{4} $个存储单元
  • MDR(Memory Data Register): 数据寄存器,用于存储要读/写的数据.其位数==存储字长.
    • 存放从存储单元取来的数据
    • MDR=16位: 每个存储单元可存放16bit,一个字(word)=16bit
    • 一个字节(Byte)=8bit;
    • 1B=一个字节(Byte);
    • 1b=一个bit

运算器

  • ACC: 累加计数器,存放操作数,运算的结果
  • MQ: 乘商寄存器,进行乘,除法时用到
  • X: 通用寄存器,存储操作数
  • ALU: 算数逻辑单元,用电路实现各种算数运算,逻辑运算

控制器

  • PC(Program Counter): 程序计数器
    • 存放下一条指令的地址
  • IR(Instruction Register): 指令寄存器
    • 存放当下欲执行的指令
  • CU(Control Unit): 控制单元,分析指令,给出控制信号

计算机性能指标

  • 存储器容量
    • MAR的位数反映存储单元数量
    • MDR反映每个存储单元大小
  • CPU
    • 时钟周期: CPU中最小的时间单位,每个动作至少要一个时钟周期
    • 主频(时钟频率): =1/时钟周期,单位: Hz
    • CPI: 执行一条指令所需的时钟周期数
    • CPU执行时间
      • 运行一个程序所花费的时间
      • =(指令条数*CPI)/主频
    • IPS: 每秒执行多少条指令=主频/平均CPI
      • MIPS(Million Instructions Per Second)=即每秒执行多少百万条指令。
    • FLOPS: 每秒执行多少次浮点运算
      • MFLOPS(Mega Floating-point Operations Per Second)=浮点操作次数/(执行时间x10610^{6}),即每秒执行多少百万次浮点运算。
      • GFLOPS(Giga Floating-point Operations Per Second)=浮点操作次数/(执行时间x10910^{9}),即每秒执行多少十亿次浮点运算。
      • TFLOPS(Tera Floating-point Operations Per Second)=浮点操作次数/(执行时间x101210^{12}),即每秒执行多少万亿次浮点运算。
  • 常用数量单位
    • 描述存储容量,文件大小时:K=2102^{10},M=2202^{20},G=2302^{30},T=2402^{40}
    • 描述频率,速度时:K=10310^{3},M=10610^{6},G=10910^{9},T=101210^{12}

数据的表示与运算

进位计数制及其相互转化

  • r进制数: 基数=r,每个数码位可能出现r种字符.逢r进1

  • r进制数–>十进制: r进制数的数值=各数码位与位权的乘积之和

  • 二进制<–>八进制: 每3个二进制位对应一个八进制位

    1
    2
    二进制: 001 111 000 010 . 011 010
    八进制: 1 7 0 2 3 2
  • 二进制<–>十六进制: 每4个二进制位对应一个十六进制位

    1
    2
    二进制: 0011 1100 0010 . 0110 1000
    十六进制: 3 C 2 . 6 8
  • 十进制–>r进制

    • 整数部分: 除基取余法,先取得的"余"是整数的低位.倒序取余
    • 小数部分: 乘积取整法,先取得的"整"是小数的高位,正序取整

机器数和真值

  • 机器数: 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.
  • 真值: 因为第一位是符号位,所以机器数的形式值就不等于真正的数值.所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

原码,反码,补码基础概念和计算方法

  • 原码: 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值.

    • 原码是人脑最容易理解和计算的表示方式.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    比如如果是8位二进制:

    [+1]原 = 0000 0001

    [-1]原 = 1000 0001

    第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

    [1111 1111 , 0111 1111]

    即[-127 , 127]
  • 反码的表示方法是:

    • 正数的反码是其本身
    • 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
    1
    2
    3
    [+1] = [00000001]原 = [00000001]反

    [-1] = [10000001]原 = [11111110]反
  • 补码的表示方法是:

    • 正数的补码就是其本身
    • 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
    1
    2
    3
    [+1] = [00000001]原 = [00000001]反 = [00000001]补

    [-1] = [10000001]原 = [11111110]反 = [11111111]补

在高级语言编程中所定义的unsigned/short/int/long/float/double型数据是怎么表示的?什么称为无符号整数的“溢出”?

  • unsigned型数据就是无符号整数,不考虑符号位。直接用全部二进制位对数值进行编码得到的就是无符号数,一般都用补码表示。
  • int型数据就是定点整数,一般用补码表示。int型数据的位数与运行平台和编译器有关,一般是32位或16位。例如,真值是-12的int型整数,在机器内存储的机器数(假定用32位寄存器寄存)是1111-1111-1111-1111-1111-1111-1111-0100.
  • long型数据和short型数据也都是定点整数,只是位数不同,分别是长整型和短整型数,通常用补码表示。
  • float型数据是用来表示实数的浮点数。现代计算机用IEEE754标准表示浮点数,其中32位单精度浮点数就是float型,64位双精度浮点数就是 double型。
  • 需要注意的是,C语言中的int型和 unsigned型变量的存储方式没有区别,都按照补码的形式存储,在不溢出范围内的加减法运算也是相同的,只是int型变量的最高位代表符号位,而unsigned型中的最高位表示数值位,两者在C语言中的区别体现在输出时到底是采用%d还是采用%u。
  • 对于无符号定点整数来说,若寄存器位数不够,则计算机运算过程中一般保留低n位,舍弃高位。这样,会产生以下两种结果。
    • 保留的低n位数不能正确表示运算结果。在这种情况下,意味着运算的结果超出了计算机所能表达的范围,有效数值进到了第n+1位,称此时发生了“溢出”现象
    • 保留的低n位数能正确表达计算结果,即高位的舍去并不影响其运算结果。