系列文章目录
前言
哈工大计组网课笔记,教材是《计算机组成原理》(唐朔飞)
(零):导论
0.1.计算机中数的表示
数据表示:是指在计算机当中,能够被硬件直接识别和处理的数据类型。所谓能够能够被硬件直接识别处理是指在计算机系统的指令集当中,包含对这些种类型的数据进行操作的指令。这些数据的运算包含在指令当中,必须在系统当中用硬件来实现这些运算,在这个过程当中,将分析数据的比、算方法,并且对其进行改进。在此基础上,借助比、算方法,研究这些算法在计算机当中用硬件如何实现。给出相应的硬件组成。
0.2.计算机的运算方法
- 无符号数和有符号数
- 数的定点表示和浮点表示
- 定点运算
- 浮点四则运算
- 算数逻辑单元
0.3.运算器的设计
(一)无符号数和有符号数
1.无符号数
无正负号的数据,如C语言中的Unsigned。只有数值部分,没有符号位,转成二进制,然后用用计算机的寄存器/存储器按照规定的长度保存在计算机当中即可。
如果是保存在寄存器中,则寄存器的位数反映了无符号数的表示范围。
2.有符号数
有正负号的数,数据分为符号部分和数值部分。
2.1.机器数与真值
- 机器数:保存在计算机当中的数称为机器数。
- 真值:程序使用的数据的真实的值,带有正负号。
在计算机当中,符号要数值化,用数据表示符号。计算机用高、低电平表示0、1,即用0、1来代表数字的符号。
真值在计算机中保存要保存三部分:数字的符号,小数点的位置,数值位的值。
在计算机中,没有专门的硬件表示小数点,计算机当中的小数点都是以约定的形式给出,比如说放在符号位的后面(如:+0.1011、-0.1011),或者是数值位的最后(如:+1100、-1100)。
计算机按照小数点表示的位置可以分为小数定点机(放在符号位的后面)和整数定点机(放在数值位的最后)。
符号数字化就已经给出了一种机器数的表示方式,就称为原码表示法。
2.2.原码表示法
2.2.1.原码定义
- x x x是真值的数值部分
- n n n是真值的数据位的位数
注意: 2 n > x 2^n>x 2n>x是因为 n n n位的数最大能表示的是 2 n − 1 2^n-1 2n−1, x > − 2 n x>-2^n x>−2n同理。
当 x = 0 x =0 x=0时, x x x的原码可能会不同。
当 x = 0 x =0 x=0时, x x x的原码也可能会不同。
小数这里的小数点和整数那里的逗号,在计算机当中都不会去存储,只是为了阅读方便。
优点:简单、直观
存在问题:正负数加减会出现问题。
问题:实际操作能否只有加法?
找到一个与负数等价的正数来代替整个负数,即可使减法变加法。(补码表示法)
2.3.补码表示法
2.3.1.补的概念
模,是指一个计量系统的计数范围.如时钟等,计算机也可以看成一个计量机器, 它也有一个计量范围,即都存在一个“模”.
例如:时钟的计量范围是0~11,模=12. 表示n位的计算机计量范围是
0
~
2
n
−
1
0~2^{n-1}
0~2n−1,
模
=
2
n
模=2^n
模=2n.
- 一个负数加上“模”即得该负数的补数
- 一个正数加上“模”即得该正数的补数,也是其本身
- 一个正数和一个负数互为补数时它们绝对值之和即为模数
- 补码的正0和负0的补码一样都是0
∣ 真值 ∣ + ∣ 补数 ∣ = 模 |真值|+|补数| = 模 ∣真值∣+∣补数∣=模,因此,负数的补数一定是正数。
从代数计算的角度看 可以看看这篇:补码和模,但是这里算出的模和下面补码定义的模差了两位,和原码定义的模差一位,没想清楚是为什么。
2.3.2.正数的补数即为其本身
2.3.3.补码定义
在真值当中,小数的后面可以有任意位零,但机器数是有位数约定的,当真值表示成机器数时,如补码时,是会受到计算机硬件的限制的(或者说计算机体系结构定义的数据的长度的限制),例如真值有八位,但是寄存器只有六位,真值的后两位就会被舍入,此时真值不等于其补码表示数值。
2.3.4.求补码的快捷方式
模=补码+原码(负数)
2.4.反码表示法
2.4.1.反码定义
2.4.2.三种机器数的小结
2.5移码表示法
补码表示很难直接判断其真值大小
2.5.1.移码定义
移码只给出了整数定义,没有给出小数定义,这和移码在计算机的数据表示当中的作用有关。因为移码的大小很好判断,通常用来表示浮点数据表示的阶码部分,阶码都是整数,所以移码的定义当中也只给出整数形式的定义。
2.5.2.移码和补码的比较
2.5.3.真值、移码、补码的对照表
2.5.4.移码的特点
(二)数的定点表示和浮点表示
1.定点表示
小数点按约定的方式标出。
在计算机当中,没有专门的硬件表示小数点位置,小数点的位置是由计算机体系结构设计人员在设计计算机体系结构时约定的,在软硬件实现时都要遵守这个约定。软件编程人员要根据这个约定调整数据的大小。
- 小数点的位置约定在数符的后面,表示计算机当中,存放的定点数都是小数,如果时补码形式的话,可以表示的唯一的一个整数就是 − 1 -1 −1。
- 小数点的位置还可以约定在数值部分的后面,表示计算机中的定点数都是整数。
根据一台定点计算机小数点约定的位置,可以把定点计算机分成两类:、
真值是连续的,机器数是离散的。
2.浮点表示
为什么在计算机中要引入浮点数表示?
- 编程困难:最早的计算机因为硬件的限制,只有定点表示方式,即小数定点机和整数定点两种方式。但是在科学计算过程中,经常用到浮点数,在定点计算机中要使用浮点数时,需要程序员调节小数点的位置,并对计算结果进行校正。
- 数的表示范围非常小,为了表示两个大小相差很大的数据,需要很长的机器字长。
- 数据存储单元的利用率很低。
浮点数表示的格式是什么? N = S × r j 浮点数一般表现形式 S − 尾数 j − 阶码 r − 尾数的基值 N = S \times r^j \quad \quad 浮点数一般表现形式 \\ S-尾数\quad j-阶码\quad r-尾数的基值 N=S×rj浮点数一般表现形式S−尾数j−阶码r−尾数的基值 在计算机当中,尾数的绝对值小等于1,阶码是整数,取2、4、6、8、16等。
尾码和阶码的基数必须是2吗?基值的影响?
不一定是2,可以取2、4、6、8、16等。基值决定尾数中小数点的位置。
浮点数表示的范围与精度和哪些因素有关?
表示的范围与阶码有关,阶码位数越大,表示的范围越大;精度与尾数位数有关,位数位数越长,表示的精度越高。
为什么要引入规范化表示?
规格化数:数值位第一位非零。
对浮点数进行规格化,是为了尽可能的保证数据的精度,如果不进行数据的规格化,尾数的小数点后面可能会有若干个无效的0,在计算机当中存储的机器数的位数是有限的,超出位数就会被舍入(丢弃),会严重影响数据精度。
为了尽可能保证数据的精度,要让有效的位数尽可能多,所以采用规格化的形式。目前浮点数表示格式的标准是什么?
IEEE754标准
2.1.浮点数的表示形式
N = S × r j 浮点数一般表现形式 S − 尾数 j − 阶码 r − 尾数的基值 N = S \times r^j \quad \quad 浮点数一般表现形式 \\ S-尾数\quad j-阶码\quad r-尾数的基值 N=S×rj浮点数一般表现形式S−尾数j−阶码r−尾数的基值
2.2.浮点数的表示范围
一位表示阶符,一位表示尾符,四位表示阶码数值,10位表示尾数数值,数据长度一共16位,能够表示的机器数的个数是256个,表示最小负数到最大正数这个区间的所有真值。(有限的数据表示无线多的实数)
- 最小负数:绝对值最大的负数,尾数的绝对值最大,阶码最大(绝对值最大的正数)。
- 最大负数:绝对值最小的负数,尾数的绝对值最小,阶码最小(绝对值最大的负数)。
- 最小正数:绝对值最小的正数,尾数的绝对值最小,阶码最小(绝对值最大的负数)。
- 最大正数:绝对值最大的正数,尾数的绝对值最大,阶码最大(绝对值最大的正数)。
为了保证数的最大精度,位数需要尽可能的长,所以在阶码位数满足后,除了尾符和阶符需要的两位,其他所有位都给尾数。
2.3.浮点数的规格化形式
2.4.浮点数的规格化
3.举例