review
总复习
(一)绪论
1. 计算机的发展
现代计算机的理论基础:布尔代数、物质基础:双稳态触发器。
1946年,美国,ENIAC,电子数字积分和计算机
1946年6月,冯·诺伊曼提出以二进制,程序存储和程序控制为核心的思想,奠定了当代电子数字计算机体系结构的基础。
- 1946-1954年,第1代,电子管计算机,ENIAC、IBM 701
- 1955-1964年,第2代,晶体管计算机,IBM 7030、Univac LARC
- 1965-1974年,第3代,集成电路计算机,IBM 360、370、DEC PDP-8
- 1975-1990年,第4代,超大规模集成电路计算机,IBM 3090、VAX 9000、PC机、苹果机
- 1991-,第5代,多核处理器(4核和8核)
2. 计算机的基本组成
这是去年的考题!!!
冯·诺伊曼机的硬件固定,不同的运算功能依靠预先放在存储器中的程序实现,这是存储程序控制的基本原理,也是区别其他运算工具的关键。
计算机的软件:
- 计算机语言:机器语言、汇编语言、高级语言
- 软件分类:系统软件、应用软件、中间件
3. 计算机的层次结构
4. 计算机的分类
按照规模和功能分类:
巨型机、大型机、中型机、小型机、微机、单片机
按用途分类:
通用机(如:PC机)、专用机(如:嵌入式计算机)
按信息处理的特性分类:(FLYNN)费林分类法
- 单指令流单数据流计算机(SISD)
- 单指令流多数据流计算机(SIMD)
- 多指令流单数据流计算机(MISD)
- 多指令流多数据流计算机(MIMD)
Flynn分类法:按照计算机在执行程序的过程中信息流的特征进行分类的。
5. 计算机的性能描述
(个人认为可能概率会出题)
- MIPS:每秒钟执行指令的百万条数
- MFLOPS:每秒钟执行浮点数的百万次操作的数量
- CPI:每条指令执行所用的时钟数
- N:每条指令执行所用的时钟数
- $f_{CLK}$:时钟频率
(二)计算机中的数据表示
1. 不同编码的比较
- 真值为 + :原码、补码、反码的表示形式均相同。
- 真值为 - :原码、补码、反码的表示形式不同。
- 特殊的移码: 0 表示真值是负数; 1 表示真值是正数。
0有唯一的编码:补码、移码。
原码:1000 0000 | 0000 0000
反码:1111 1111 | 0000 0000
符号位用0表示正、用1表示负:原码、反码、补码
移码:1表示正、0表示负
满足真值大则码值大:移码
最高位符号位1为负数(真值小码值小):原码、反码、补码
存在负值的真值越大码值越小:原码
【-1】补=【1000 0001】补=【1111 1111】可见是:最大的负值、最大的码值。
反码 = 补码 - 1、移码 = 补码最高符号位取反 因此均不是。
负数的码值大于正数的码值:原码、反码、补码
原理是:负数的码值最高位符号位为1
2. 浮点数
规格化指的是尾数的绝对值限定在$\frac{1}{2} $~$ 1$之间。
若$M\ge0$:$M=0.1XX…X$是规格化数。
若$M\lt0$:由于$[-\frac{1}2]{补}=1.1000…0$、$[-1]{补}=1.000…0$。为了使计算机判断方便,一般不把$[-\frac{1}2]$列为规格化的数,而把$[-1]$列为规格化的数。$M=1.0XXX…X$时,是规格化数。
貌似左规和右规都是在采用了双符号位,也就是变形补码后产生的。
左规:结果的尾数为$00.0XXX…X$或$11.1XXX…X$的形式时,需将尾数左移1位,阶码 -1,直到尾数为规格化形式为止。
右规:当浮点运算结果的尾数出现$01.XXX…X$或$10.XXX…X$的形式时,并不一定溢出,将尾数右移1位,阶码 +1,然后判断阶码是否溢出。
2.1 IEEE754
单精度格式:1+8+23(符号+阶码+尾数)
更多的重点还是放在单精度的浮点数上,至于双精度格式(1+11+52)只是被提了一下。
(三)运算方法和运算器
运算器用于数值运算及加工处理数据。
运算器的结构取决于:指令系统、数据的表示方法、运算方法以及所选用的硬件。
它由CPU中的ALU、GR(通用寄存器)等部件组成。
1. 定点数运算
1.1 加减
特别声明的是:求补运算
(主要用于 $[X]{补}\leftrightarrow[-X]{补}$ 这种情况,对于符号位和数值位均按位取反,末位+1)
1.1.1 溢出判断
只有当两个同符号的数相加(or 相异符号数相减),运算结果才可能溢出。异号相加,永远不会产生溢出。
发生溢出时,运算结果肯定是错误的。防止溢出发生的最简单有效的方法即:增加补码的二进制编码长度。
我还想的是采用双符号位呢…不过双符号位并不能防止溢出,而是判断是否溢出。果然。
① 双符号位判决法(最常用)
补码采用两位表示符号,即00(+)和11(-)。
一旦发生溢出,则两个符号位就一定不一致。
- 出现01,结果 > +1
- 出现10,结果 < -1
所以01是上溢、10是下溢吗?
② 进位判决法
类似于双符号位,【最高数值位向符号位的进位】$\oplus$【符号位的进位】
1.1.2 移码加减 $[X]{移}\pm[Y]{移}\ne[X\pm Y]_{移}$
1.2 乘
1.2.1 原码一位乘
对于原码二位乘,只需了解(我认为意思是不会考)。
1.2.2 补码一位乘(Booth法)
1.3 除
1.3.1 原码一位除
① 恢复余数法
② 加减交替法
末位商如果为0,此时的余数是错误的。此时通过恢复余数码来得到正确的余数。
我觉得恢复余数法和加减交替法之间在计算过程中并无差异,主要是思想上的不同:恢复余数指的是不断减去除数,如果余数是负的,就要恢复余数为正的(加上除数),再不断减去除数;加减交替指看余数的正负,正的就减除数,负的就加除数。
1.3.2 补码一位除
这个是课后学习,但是出了一道关于这个的课后题。所以还是看看。
余数的校正规则:
- 若商为正:余数与被除数异号,余数+除数
- 若商为负:余数与被除数异号时,余数-除数
2. ALU
2.1 运算器的结构
基本组成包括算术逻辑单元ALU、暂存器、通用寄存器堆、内部总线。
2.1.1 标志寄存器、标志位
标志寄存器,又称状态寄存器。(我感觉状态寄存器更常用一点)用于保存ALU操作结果的某些状态。不同CPU,标志寄存器中包含的标志不尽相同。但是都会有如下最基本的5中标志位:
- ZF=1:结果全为0。
- CF=1:表示有进位或者是借位。
- OF=1:运算溢出。
- SF=1:运算结果为正数。(现代微机中,有符号数采用补码表示)
- PF=1:反映运算结果中‘1’的个数为偶数。
3. 浮点运算
3.1 浮点加减
①对阶:只有在两者的阶码相同时才能进行尾数的加减运算。其原则是小阶对大阶。也就是将小阶码(更小的数字挪到大数字的小数点处)
不断地右移获得阶码+1。但是会在对阶时丢失尾数的低位,造成的误差相对较小。但要是大阶对小阶,就会就是尾数的高位,导致错误的结果。
②尾数进行加减运算(直接相加或是加补)
③规格化:在进行完计算后可能得到的是一个非规格化数。则需要进行规格化。
(1)左规 ←
尾数是:$00.0XX···X$ 或是 $11.1XX···X$
左规时,尾数每左移一位,阶码减1,必须同时判断阶码是否减到比所能表示的阶码还小。
如果出现,阶码无法表示太小的阶码,就出现了下溢出。(下溢出发生可认为结果=0)
(2)右规 →
结果出现:$10.XXX···X$ 或是 $ {0}1.XXX···X$
表示尾数出现溢出,但并不代表整个结果浮点数溢出。
出现上述情况,可将尾数右移最多一次,阶码+1。
可能会出现阶码超出能表示的最大范围,发生上溢出。
④舍入处理:在对阶以及规格化的时候,需要将尾数右移,右移会丢弃尾数的最低位,出现了舍入的问题。一般采用以下三种方法。
(1)截断法:将需要丢弃的尾数低位丢弃。
(2)末位恒置1法:无论尾数右移丢弃的是0还是1,此法需要保证保留的尾数的最低位永远为1.
(3)0舍1入法:当尾数右移丢弃的是1,要保留的最末位+1,当丢弃0,保留的最末位不变。
(但是可能遇到01.1111111时发生溢出,因此需要使用截尾法。)
3.2 浮点乘除
(四)指令系统和汇编语言
1. 指令格式
设置指令系统的要求是:完备性、有效性、规整性、兼容性。
Huffman编码的主要缺点:
- 操作码长度很不规整,硬件编码困难。
- 与地址吗共同组成固定长的指令比较困难。
扩展编码方式
有等长15/15/15…扩展法 or 等长 8/64/512…扩展法。(只是众多扩展法之二)
- 是一种重要的指令优化技术:缩短指令平均长度、减少程序总位数和增加指令字所能表示的操作信息。
- 一般用在指令字长较短的微、小型机上。
2. 寻址方式
指令中以什么方式提供操作数或操作数地址,称为寻址方式(或是编址方式)。
以下是以8086/8088为例: