1.45k likes | 1.69k Views
计算机组成原理. 任课教师:石磊 教授 郑州大学信息工程学院计算机系 Email: shilei@zzu.edu.cn. 目录. 第一章 计算机系统概论 第二章 运算方法和运算器 第三章 存储系统 第四章 指令系统 第五章 中央处理器 第六章 总线系统 第七章 外围设备 第八章 输入输出系统 第九章 并行组织. 教材 白中英,计算机组成原理 · 网络版,科学出版社, 2002 参考书 石磊,计算机组成原理 · 第 2 版 , 清华大学出版社, 2006 钱晓捷,微型计算机原理及应用 , 清华大学出版社, 2006
E N D
计算机组成原理 任课教师:石磊 教授 郑州大学信息工程学院计算机系 Email: shilei@zzu.edu.cn
目录 • 第一章 计算机系统概论 • 第二章 运算方法和运算器 • 第三章 存储系统 • 第四章 指令系统 • 第五章 中央处理器 • 第六章 总线系统 • 第七章 外围设备 • 第八章 输入输出系统 • 第九章 并行组织
教材 • 白中英,计算机组成原理·网络版,科学出版社,2002 • 参考书 • 石磊,计算机组成原理·第2版, 清华大学出版社,2006 • 钱晓捷,微型计算机原理及应用, 清华大学出版社,2006 • 王爱英,计算机组成与结构·第3版, 清华大学出版社,2001 • 白中英 邝坚,计算机组织与结构·网络版,科学出版社,2003
第二章 运算方法和运算器 • 重点:数据表示 • 简介:运算方法和运算器 • 补充:数字逻辑 数制
二进制数 • 便于计算机存储及物理实现 • 特点:逢二进一,由0和1两个数码组成,基数为2,各个位权以2k表示 • 二进制数: anan-1…a1a0.b1b2…bm= an×2n+an-1×2n-1+…+a1×21+a0×20 +b1×2-1+b2×2-2+…+bm×2-m 其中ai,bj非0即1
十六进制数 • 用于表达二进制数,相互转换简单 • 基数16,逢16进位,位权为16k,16个数码: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F • 十六进制数: anan-1…a1a0.b1b2…bm= an×16n+an-1×16n-1+…+a1×161+ a0×160 +b1×16-1+b2×16-2+…+bm×16-m 其中ai,bj是0~F中的一个数码
二进制数或十六进制数转换为十进制数 • 方法:按权展开 • 二进制数转换为十进制数 0011.1010B =1×21+1×20+1×2-1+0×2-2+1×2-3 =3.625 • 十六进制数转换为十进制数 1.2H =1×160+2×16-1 =1.125 二进制数用后缀字母B 十六进制数用后缀字母H
十进制整数转换为二或十六进制数 演示 • 整数部分转换:用除法 • 十进制数整数部分不断除以基数2或16,并记下余数,直到商为0为止 • 由最后一个余数起逆向取各个余数,则为转换成的二进制和十六进制数 126=01111110B 126=7EH
十进制小数转换为二或十六进制数 演示 • 小数部分转换:用乘法 • 分别乘以各自的基数,记录整数部分,直到小数部分为0为止 0.8125=0.1101B 0.8125=0.DH • 小数转换会发生总是无法乘到为0的情况 • 可选取一定位数(精度) • 将产生无法避免的转换误差
十六进制数的加减运算 • 二进制和十六进制数之间具有对应关系 • 整数从左向右 • 小数从右向左 • 每4个二进制位对应一个十六进制位 00111010B=3AH,F2H=11110010B • 十六进制数的加减运算类似十进制 • 逢16进位1,借1当16 23D9H+94BEH=B897H A59FH-62B8H=42E7H
真值和机器数 • 真值:现实中真实的数值 • 机器数:计算机中用0和1数码组合表达的数值 • 定点数:固定小数点的位置表达数值的机器数 • 定点整数:将小数点固定在机器数的最右侧表达的整数 • 定点小数:将小数点固定在机器数的最左侧表达的小数 • 浮点数:小数点浮动表达的实数 • 无符号数:只表达0和正整数的定点整数 • 有符号数:表达负整数、0和正整数的定点整数 • 符号位需要占用一个位,常用机器数的最高位 • 0表示正数、1表示负数 • 具有原码、反码、补码、移码
无符号数的表示 • 没有符号位,使用全部字长来表示数值大小 • 字长N=8时,编码:00000000~11111111 取值范围:0~255(28-1) • 字长N=16时,编码:0000~FFFFH 取值范围:0~65535(216-1) • 字长N=32时,编码:00000000~FFFFFFFFH 取值范围:0~232-1
2.1数据与文字的表示方法 • 2.1.1 数据格式 • 2.1.2 数的机器码表示 • 2.1.3 字符与字符串的表示方法 • 2.1.4 汉字的表示方法 • 2.1.5 校验码
2.1.1数据格式 • 计算机中常用的数据表示格式有两种,一是定点格式,二是浮点格式 • 定点格式容许的数值范围有限,但要求的处理硬件比较简单 • 浮点格式容许的数值范围很大,但要求的处理硬件比较复杂
定点数的表示方法 • 定点表示:约定机器中所有数据的小数点位置是固定不变的。通常将数据表示成纯小数或纯整数 • 定点数x=x0x1x2…xn在定点机中表示如下(x0表示符号位,0代表正号,1代表负号) 定点整数的小数点位置 定点小数的小数点位置
定点数例 纯整数:X = 01010110. 正数,符号位取0 例: X=+1010110. Y= - 1101001. 纯整数:Y = 11101001. (原码) 负数,符号位取1 X=+0.11011 纯小数:X = 0.11011 符号位取0 Y=-0.10101 纯小数:X = 1.10101 (原码) 符号位取1
定点整数的表示范围 • 纯整数的表示范围为(x1x2…xn各位均为0时最小;各位均为1时最大,x0为符号位) 0≤|x|≤ 2n-1 • 例如:n=8,最大值编码:11111111 表示: 11111111=100000000-1 =28-1 • 目前计算机中多采用定点纯整数表示,因此将定点数表示的运算简称为整数运算
定点小数的表示范围 • 纯小数的表示范围为(x1x2…xn各位均为0时最小;各位均为1时最大,x0为符号位) 0≤|x|≤1-2-n • 例如,n=8,最大值编码:0.11111111 表示: 0.11111111 =1.0-0.00000001 =1-2-8
非常大和非常小的数 如何用定点数来表示非常大(e.g. 2×10+33)的数和非常小(e.g. 9×10-28)的数? 引入比例因子1034和10-27 2×10+33= 0.2 ×1034 9×10-28= 0.9 ×10-27
数的科学表达法 浮点数的表示方法 • 把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示 • 数的小数点位置随比例因子的不同而在一定范围内自由浮动 • 一个十进制数N可以写成 N= 10e×M • 一个R进制数N可以写成 N=Re×M M尾数 e指数 R 基数
用定点小数表示,给出有效数字的位数决定了浮点数的表示精度用定点小数表示,给出有效数字的位数决定了浮点数的表示精度 阶码和尾数 • 表达指数部分 • 用整数形式表示,指明小数点在数据中的位置决定浮点数的表示范围 早期计算机表达法
IEEE 754标准 32位单精度浮点数 E:含阶符的阶码,8 位 阶码采用移码方式来表示正负指数 S:1位符号位 0表示正数 1表示负数 M:尾数,23位小数表示,小数点放在尾数域最前面
IEEE 754标准 64位双精度浮点数 E:含阶符的阶码,11位 M:尾数,52位小数 S:1位符号位
浮点数的规格化 多种数据形式 例:156.78 =15.678×101 =1.5678×102 = 0.15678×103=RE×M 那么,计算机中究竟采用哪种数据形式? 对于二进制数 1011.1101 =0.10111101 ×2+4 = 10.111101 ×2+2 = 1.0111101 ×2+3 (规格化表示法)= 1.0111101 ×2+11 (规格化表示法) =RE×M 二进制数
IEEE 754标准 规格化表示原则 • 尾数最高有效位为1,隐藏,并且隐藏在小数点的左边(即:1≤M<2) • 32位单精度浮点数规格化表示 x= (-1)s×(1.M)× 2E-127 e=E-127(E=e+127) • 64位双精度浮点数规格化表示 x= (-1)s ×(1.M)× 2E-1023 e=E-1023(E=e+1023) 指数真值e 用偏移码形式表示为阶码E
① 十六进制数展开成二进制数 0 100 0001 0011 0110 0000 0000 0000 0000 S 阶码E(8位) 尾数M(23位) 例1:浮点机器数 (41360000)16,求真值 ② 指数e=阶码-127 =1000 0010-01111111 =00000011=(3)10 ③ 包括隐藏位1的尾数1.M =1.011011 ④ X=(-1)s×1.M×2e=+(1.011011)×23 =+1011.011=(11.375)10
例2:真值20.59375,求32位单精度浮点数 ① 分别将整数和分数部分转换成二进制数 20.59375=10100.10011 ② 移动小数点,使其在第1、2位之间 10100.10011=1.010010011×24 e=4 E=4+127=131=10000011 S=0 M=010010011 ③ 得到32位浮点数的二进制存储格式为: 0100 0001 1010 0100 1100 0000 0000 0000 =(41A4C000)16
32位单精度规格化浮点数 IEEE 754标准 • E=1(0000 0001)~254(1111 1110) • e=-126~+127 • 表达的数据范围(绝对值): • 最小值: e=-126,M=0(1.M=1) 十进制表达:2-126≈1.18×10-38 • 最大值: e=127,M=11…1(23个1) 1.M=1.11…1(23个1)=2-2-23 十进制表达:(2-2-23)×2127 ≈2×2127≈3.40×1038
64位双精度规格化浮点数 IEEE 754标准 • E=1~2046 • e=-1022~+1023 • 表达的数据范围(绝对值) : • 最小值: e=-1022,M=0(1.M=1) • 十进制表达:2-1022≈2.23×10-308 • 最大值: e=1023,M=11…1(52个1) • 1.M=1.11…1 (52个1) =2-2-52 • 十进制表达:(2-2-52)×21023 • ≈ 2×21023 ≈1.79×10308
32位单精度浮点数 IEEE 754标准 • 真值0的机器数(机器零) • 阶码E=0,尾数M=0 • 正0:S=0,负0:S=1 • 非规格化浮点数:阶码E=0,尾数M≠0 • 规格化浮点数:阶码E=1~254(11111110) • 无穷大的机器数 • 阶码E=全1(11111111) ,尾数M=0 • +∞:S=0,-∞:S=1 • NaN(not a number,不是一个数) • 阶码E=全1(11111111) ,尾数M≠0 • 用来通知异常情况
十进制数串的表示方法 每个数位可用BCD码或ASCII码 1.字符串形式 每个十进制的数位或符号位都用一个字节存放 +12 -38 2.压缩的十进制数串形式 一个字节存放两个十进制的数位,符号位占半个字节(例如用C表示正,D表示负) +123 -12
BCD码(Binary Coded Decimal) • 二进制编码的十进制数 • 一个十进制数位用4位二进制编码来表示 • 常用8421 BCD码:低10个4位二进制编码表示0~9 • 压缩BCD码:一个字节表达两位BCD码 • 非压缩BCD码:一个字节表达一位BCD码(低4位表达数值,高4位常设置为0) • BCD码很直观 BCD码:0100 1001 0111 1000.0001 0100 1001 十进制真值: 4978.149 BCD码便于输入输出,表达数值准确
十进制数据表示 • 人们习惯于用十进制表示数据,而计算机则采用二进制表示和处理数据。所以向计算机输入数据时,需要进行十进制数到二进制数的转换;输出数据时,则要进行二进制数到十进制数的转换处理。在数据量较小的情况下,这样的转换对机器运行效率的影响不是很大。但是,在某些应用领域,运算简单而数据量很大,进行这些转换所占用的时间比例比较大。所以为了提高机器的运行效率,计算机可以用十进制来表示和处理数据。 • 一个十进制数位是用若干位二进制编码表示。用四位二进制代码的不同组合来表示一个十进制数码的编码方法,称为二—十进制编码,也称BCD码(Binary Coded Decimal)。 常用这种编码作为十进制数转换成二进制数的中间过渡。即先将一个十进制数用BCD码来表示,再把它们送入机器, 计算机通过标准子程序使其转换成纯二进制数。
二—十进制编码原理 1、二—十进制的编码都采用压缩的十进制串的方法,即四个二进制位的值来表示一个十进制数码。 2、各种编码的区别在于选用哪十个状态。选择的原则是:要考虑输入和输出时转换方便;内部运算时,加、减运算规则要尽量简单;在特定场合,可能有其它一些要求。 3、从每个二进制位是否有确定的位权区分,可把二—十进制编码分为有权码和无权码。
二-十进制有权码 • 对于有权码,将每位的数码与相应的位权相乘,再求和,就可以得到它所代表的十进制数值。 • 8421码实现加、减运算时的修正规则: (1)4位一组二进制数,两个8421码表示的数相加之和等于或小于1001,即十进制的9时,不需要修正,在各组内,二进制代码相加,仍遵循“逢二进一”的规则。 (2)4位一组二进制数,两个8421码相加结果大于1001(即十进制9)时,则应该对该组的4位进行“加6修正”,使它向高一组产生进位。 (3)4位一组二进制数,两个8421码相加结果大于或等于10000(即十进制16),而向高一组进位时,则应该对该4位进行“加6修正”。
二-十进制有权码 • 编码方法:8421码,2421码、5211码、4311码和84-2-1码( 四位二进制位的位权分别为8、4、-2、-1)等。其最方便使用的共同特点为: • (1) 对于2421码、5211码、4311码,任何两个十进制数位,采用这三种编码的任何一种编码,它们相加之和等于或大于10时,其结果的最高位向左产生进位,小于10时则不产生进位。这一特点有利于实现“逢十进位”的计数和加法规则。 • (2) 对于2421码、5211码、4311码和84-2-1码,任何两个十进制数位,采用这四种编码的任何一种编码,它们相加其和等于9时,即它们的二进制编码位互为反码,则其结果的四个二进制位一定是1111,能较好地体现十进制的按9 取补与二进制的按1取补的对应关系,这对减法很有用。
二-十进制无权码 • 无权码中,用的较多的是余3码(Excess-3 code)和格雷码(Gray code),格雷码又称循环码。 1. 余3码 (1)余3码是在8421码的基础上,把每个代码都加上0011而形成的。 (2)普通8421码的加法器仍能为余3码加法器直接利用,具体规则如下: (A)若两个十进制数的余3码相加,如果结果不产生进位,则从所得和值去减0011,便得十进制位和的余3码。 (B)若两个十进制数的余3码相加,如果结果有进位,则其进位正确, 但需将所得和值加上0011,才求得十进制数和的余3码。
二-十进制无权码 • 2. 格雷码 (1)格雷码的编码规则是使相邻的两个代码,只有一个二进制位的状态不同,其余三个二进制位必须有相同状态。 (2)优点:从一个编码变到下一个相邻编码时,只有一个位的状态发生变化,有利于保证代码变换的连续性。在模拟/数字转换和产生节拍电位等应用场合特别有用。
8421 位有权码 无权码 十进制 符号 格雷码(1) 2421 5211 84-2-1 4311 余3码 格雷码(2) 0 0000 0000 0000 0000 0000 0011 0000 0000 1 0001 0001 0001 0111 0001 0100 0001 0100 2 0010 0010 0011 0110 0011 0101 0011 0110 3 0011 0011 0101 0101 0100 0110 0010 0010 4 0100 0100 0111 0100 1000 0111 0110 1010 5 0101 1011 1000 1011 0111 1000 1110 1011 6 0110 1100 1010 1010 1011 1001 1010 0011 (BCD) 7 0111 1101 1100 1001 1100 1010 1000 0001 8 1000 1110 1110 1000 1110 1011 1100 1001 9 1001 1111 1111 1111 1111 1100 0100 1000 二—十进制的编码的部分编码方案
符号位 X2n>X ≥0 [X]原= 2n-X=2n+|X|0≥X>-2n 定点整数的原码表示 • 定点整数的原码形式为x0x1x2… xn • 使用8位二进制:[105] 10=[01101001]2 X=+105,则 [X]原 =01101001 X=-105, 则 [X]原 =11101001 • 0使用原码有两种表达形式 [+0]原=00000000 [-0]原 =10000000
符号位 X1 >X ≥0 [X]原= 1-X=1 +|X|0≥X>-1 定点小数的原码表示 • 定点整数的原码形式为x0.x1x2… xn • 使用8位二进制表示 x=+0.1001,则 [X]原 =01001000 x=-0.1001,则 [X]原 =11001000 • 0使用原码有两种表达形式 [+0]原=00000000 [-0]原 =10000000
定点整数的补码 演示 • 有符号整数在计算机中默认采用补码 • 最高位表示符号:正数用0,负数用1 • 正数补码:直接表示数值大小(=原码=无符号数) • 负数补码:将对应正数补码取反加1 [105]补码=01101001 [-105]补码=[01101001]取反+1 =10010110+1=10010111 • 8位二进制补码表示的数值范围:-128~+127 • 16位二进制补码表示的数值范围:-215~+215-1 • 32位二进制补码表示的数值范围:-231~+231-1 • N位二进制补码表示的数值范围:-2N-1~+2N-1-1 为什么是补码
负数求补 演示 • 负数真值“取反加1”得机器数补码 • 负数补码“取反加1”得到负数真值 补码:11100000 真值:-([11100000]求反+1)=-(00011111+1) =-00100000=-25=-32 • 负数求补运算,等效于用带借位的0作减法 真值:-8,补码:[-8]补码=100H-08H=F8H 补码:11111000,真值:-(100H-F8H)=-08H=-8 用十六进制表达和运算,方便!
定点整数的反码 • 反码:二进制的各位数码 0 变为1,1变为0 • 有符号整数采用反码 • 最高位表示符号:正数用0,负数用1 • 正数反码:直接表示数值大小(=原码=补码) • 负数反码:将对应正数反码取反 [105]反码=01101001 [-105]反码=[01101001]取反=10010110
相对于偏移一半 定点整数的移码(偏移码) • 移码通常用于表示浮点数的阶码 • 有符号整数采用移码 • 最高位表示符号:正数用1,负数用0 • 移码的传统定义: [X]移码= 2n +X2n>X≥-2n [105]移码=10000000+01101001=11101001 [-105]移码=1000000-01101001=00010111 传统定义与标准浮点数阶码的定义不同
例5 设机器字长16位,定点表示,尾数15位,数符1位,问:⑴ 定点原码整数表示时,最大正数是多少?最小负数是多少?⑵ 定点原码小数表示时,最大正数是多少?最小负数是多少?
例5之解 ⑴定点原码整数表示 最大正数值= (215-1)10=(+32767) 10 最小负数值= -(215-1) 10=(-32767) 10 ⑵定点原码小数表示 最大正数值=(+0.111...11)2=(1- 2-15) 10 最小负数值=(-0.111..11)2=-(1- 2-15)10
数的机器码表示 • 正数的原码、反码、补码等于真值,只有负数才分别有不同的表示方法 • 采用补码,减法运算可以用加法运算实现,节省硬件,目前机器中广泛采用补码表示法 • 有些机器用原码进行存储和传送,运算时改用补码 • 有些机器做加减法时用补码,做乘除法时用原码 • 移码表示法主要用于表示浮点数的阶码,可以直接比较大小。表示范围和补码相同,只有最高位相反
同一代码的不同含义 • 一个代码,采用不同编码,其数值不一样 • 计算机内一个二进制数: 1000 0001 • 不同的含义 • 无符号二进制数: 129 • 8421 BCD码: 81 • 有符号整数的原码: -1 • 有符号整数的反码: -126 • 有符号整数的补码: -127