概论
计算机基本组成
- ENIAC,手动接线来控制计算
- 早期冯诺依曼机
- 特点
- 指令和数据同等地存于存储器,按地址访问,且都用二进制表示
- 指令由操作码和地址码组成
- 存储程序:需要将指令以二进制代码的形式事先输入到主存储器中,再进行操作
- 以运算器为中心
- 组成:输入设备 -> (存储器、运算器、控制器) -> 输出设备
- 现代计算机
- 特点:以存储器为中心
- 组成:CPU(运算器、控制器) <-> 存储器 <-> 输入输出设备
主存储器(内存)
- 组成:存储体、MAR(存储地址寄存器)、MDR(存储数据寄存器)
- 基本概念
- 存储元:存储1bit的电子元件
- 存储单元:每个单元有多个存储元,可以存放一串bit
- 存储字:一个存储单元中,具体存放的数据
- 存储字长:一个存储单元中,存放的数据的长度,通常是1B、2B、4B等
- 计算
- 用MAR算存储单元数量:4bit地址线->$2^4$个存储单元
- 用MDR算存储字长:32bit数据线->32bit的存储字长
运算器
- 组成:寄存器(ACC、MQ、X)、算术逻辑单元ALU
- ACC:累加器,存放操作数或运算结果
- MQ:乘商寄存器,乘除运算时,存放操作数或运算结果
- X:通用寄存器,用于存放操作数
- ALU:实现算术运算和逻辑运算
控制器
- 组成:CU、IR、PC
- CU:控制单元
- IR:指令寄存器,存放当前执行的指令
- PC:程序计数器,存放下一条指令地址,更新时pc+=指令长度(Byte)
计算机软件
- 三种语言:高级语言 -> 汇编语言 -> 机器语言
- 翻译程序
- 编译:高级->汇编;高级->机器(只翻译一次)
- 解释:高级->机器(每执行一次就要翻译一次)
- 汇编:汇编->机器
- 软件和硬件的逻辑功能等价性:同一个功能可以用硬件实现(性能高成本高),也可以软件实现(性能低成本低)
- 指令集体系结构ISA:软件与硬件之间的界面
- 计算机系统的层次结构
- 高级语言机器(虚拟机器):将编译程序翻译为汇编程序,软件部分
- 汇编语言机器(虚拟机器):将汇编程序翻译为机器语言程序,软件部分
- 机器语言机器(传统机器):执行二进制指令,硬件部分
- 微指令系统(微程序机器):由硬件执行微指令,硬件部分
性能指标
- 存储器的性能指标
- 总容量=存储单元个数*存储字长(bit)
- 单位:KMGT是二进制单位,以2为底(一般用于描述存储容量和文件大小时)
- CPU的性能指标
- clk周期tc=time/clock
- CPI(clk/inst)、IPC(inst/clk)
- 一条指令的时间t = CPI*clk周期
- 所有指令的时间T(cpu执行时间)= 指令条数*t=cpu总周期数*clk周期
- cpu主频(clk频率) = 1/clk周期(Hz)
- IPS(inst/s)=主频/平均CPI
- FLOPS(浮点操作/s)
- 单位:KMGT是数量单位,以10为底(一般用于描述频率和速率时)
- 系统整体的性能指标
- 数据通路带宽:数据总线一次可以并行传输的位数
- 吞吐量:可以处理的请求的数量(取决于主存的存取周期)
- 响应时间:通常包括cpu运行时间+等待时间
- 系统整体的性能指标(动态测试)
- 基准程序
数据的保存方式
进制转换
- 略
定点数表示
- 与浮点数的区别:定点数的小数点位置不会动
- 分类:无符号数、有符号数(原码、反码、补码、移码)
- 无符号数的原码表示:无符号bit,真值表示范围较大($0\sim2^n-1$)
- 有符号数的原码表示
- 小数点不占实际bit
- 定点整数组成:[符号,尾数,小数点],在小数点前的数值,从右到左,以$2^0$开始增长
- 定点小数组成:[符号,小数点,尾数],在小数点后的数值,从左到右,以$2^{-1}$开始减小
- 定点整数范围:$-(2^{n-1}-1)\sim(2^{n-1}-1)$
- 定点小数范围:$-(1-2^{1-n})\sim(1-2^{1-n})$
- 原码->反码:若符号位为1(正数),则不变;若符号位为0(负数),则按位取反
- 反码->补码:若符号位为1(正数),则不变;若符号位为0(负数),则反码+1(进位可以进到符号位,即溢出)
- 补码->移码:补码的符号位取反,注意,不能用来表示小数
- 原码和反码中,真值0有两种表示形式;补码和移码中,真值0只有一种表示形式
- 加减法中的模理论:
- 同余:进行相同的模运算,将余数相同的数称作“在mod x下同余”
- 模的确定:如果机器位长为xbit,则会自然地完成$\mod2^x$
- 补码的原始定义:补码=模-a的绝对值
- 因此ALU用加法器来代替减法器
- 符号扩展与零扩展:略
加法器
- 半加器
- 全加器
- 串行进位加法器(行波进位)
- 并行进位加法器(超前进位)
ALU
- 控制信号:与ALU支持的运算个数相关,如果支持k种功能,则控制信号的个数$m\ge\lceil\log_2k\rceil$
- ALU计算位数:机器字长=ALU计算位数
- 标志位:ZF(运算结果是否为0)、SF(有符号数运算结果的正负)、OF(有符号数运算是否溢出)、CF(无符号数运算是否溢出)。这些信息会被送入PSW程序状态字寄存器/FR标志寄存器中,有时会进行软件处理。
- 加法/减法:略
- 移位:略
- 原码乘法
- X保存被乘数
- ACC保存乘积高位(使用前必须置0),MQ保存乘积低位或乘数。计算过程中,[ACC,MQ]保存乘法的部分积
- A(1bit)乘B(nbit):如果A为0,则结果为0;如果A为1,则结果为B
- 数值的确定
- 用A和B两者的绝对值来进行计算
- 流程:乘法再加法最后移位,即先将1bit乘法的结果加在[ACC,MQ]上,然后将[ACC,MQ]逻辑右移1位
- 符号位的确定
- A与B相乘的符号位为:A的符号位$\bigoplus$B的符号位
- 补码乘法
- 略
- 原码除法
- X保存除数
- ACC保存被除数或余数(使用前必须置0),MQ保存商。计算过程中,[ACC,MQ]保存除法的部分商
- 数值的确定
- 略
- 符号位的确定
- A与B相除的符号位为:A的符号位$\bigoplus$B的符号位
- 补码除法
浮点数
- 组成:阶码(阶符、阶码数值部分)、尾数(数符、尾数数值部分)
- 阶码E:是用补码/移码表示的定点整数。它反映小数点的实际位置->浮点数的表示范围
- 尾数M:是用原码/补码表示的定点小数。它反映浮点数的精度
- 阶码的底r:通常是2
- 对应真值
- $r^E\times M$
- 比如有$2^{3D}\times0.1011B$中,实际上是把$0.1011B$向左移3bit(乘2==左移)
- 浮点数规格化:通过左/右移,使得尾数的最高位一定是有效的(那个bit一定要为1)
- 左规:若尾数非规格化时,进行左移1bit,同时阶码-1,直到规格化
- 右规:若尾数溢出(双符号位为01或10)时,进行右移1bit,同时阶码+1,直到不溢出
- 规格化后的表示范围:略(原码和补码)
- 浮点数加法/减法
数据的存储和排列
- 略