Schwertlilien
As a recoder: notes and ideas.

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)费林分类法

    1. 单指令流单数据流计算机(SISD)
    2. 单指令流多数据流计算机(SIMD)
    3. 多指令流单数据流计算机(MISD)
    4. 多指令流多数据流计算机(MIMD)

Flynn分类法:按照计算机在执行程序的过程中信息流的特征进行分类的。

8

5. 计算机的性能描述

(个人认为可能概率会出题)

  • MIPS:每秒钟执行指令的百万条数
  • MFLOPS:每秒钟执行浮点数的百万次操作的数量
  • CPI:每条指令执行所用的时钟数
  • N:每条指令执行所用的时钟数
  • $f_{CLK}$:时钟频率


(二)计算机中的数据表示

1. 不同编码的比较

  1. 真值为 + :原码、补码、反码的表示形式均相同。
  2. 真值为 - :原码、补码、反码的表示形式不同。
  3. 特殊的移码: 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(-)。

一旦发生溢出,则两个符号位就一定不一致。

  1. 出现01,结果 > +1
  2. 出现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 补码一位除

这个是课后学习,但是出了一道关于这个的课后题。所以还是看看。

余数的校正规则:

  1. 若商为正:余数与被除数异号,余数+除数
  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为例

3. PC指令系统

4. 汇编

5. CISC & RICS

(五)存储系统

(六)处理器设计

搜索
匹配结果数:
未搜索到匹配的文章。