1、计算机组成原理第0100章 运算方法2014 秋季学期数字电路基础模拟信号 & 数字信号 模拟信号 在时间和数值上是连续变化的 比如,环境温度的变化,声波 数字信号 在时间和数值上是离散分布的 比如,PC处理的信号计算机可处理的二值数字信号数字电路 处理数字信号的电路,是计算机的真正硬件 把用户程序和系统程序的逻辑关系转变为电流的流动 是计算机科学与电子工程的交叉学科门和布尔代数数字电路是由少量几个基本元素通过多种方式组合而成的“门”是制造所有数字电路的基础需要一种数学方式来描述由门组合而成的电路的功能-布尔代数门 数字电路只能表示两个逻辑值:1 和 0,一般情况下: 电压处于01V之间的信号
2、表示 0 电压处于25V之间的信号表示1 门:一种微小的电子设备,可以实现一个或多个0、1 逻辑值 的运算,是数字计算机的硬件基础。门的工作原理 门属于设备层次 最简单的门:晶体管(有3个极) 集电极 基极 发射极 晶体管工作原理 Vin 小于特定值,晶体管断开,像一个无穷大的电阻,VoutVcc Vin 大于特定值,晶体管导通,使得 Vout 直接接地,Vout 远小于 Vcc门的工作原理 Vin 为 0V,晶体管断开,则 Vout = 5V 01 Vin 为 5V,晶体管导通,则 Vout = 0V 10一个晶体管就像是一个逻辑值的反转器,即,输入1,输出0;输入0,输出1y = f (x
3、)x = 0, 1y = 1, if x = 0y = 0, if x = 1数学描述把两个晶体管组合起来:串联两个晶体管串联:2个输入 (V1, V2),1个输出 (Vout)要想判断 V1, V2 对 Vout 的影响,首先要判断 V1,V2 存在哪些组合情况:V1 = 0V2 = 0V1 = 1V2 = 0V1 = 1V2 = 1V1 = 0V2 = 1Vout = 1Vout = 1Vout = 1Vout = 0y = f (x1, x2)xi = 0, 1y = 1, if x1 = x2 = 0y = 1, if x1 = 1, x2 = 0y = 1, if x1 = 0, x
4、2 = 1y = 0, if x1 = x2 = 1数学描述把两个晶体管组合起来:并联两个晶体管并联:2个输入 (V1, V2),1个输出 (Vout)要想判断 V1, V2 对 Vout 的影响,首先要判断 V1,V2 存在哪些组合情况:V1 = 0V2 = 0V1 = 1V2 = 0V1 = 1V2 = 1V1 = 0V2 = 1Vout = 1Vout = 0Vout = 0Vout = 0y = f (x1, x2)xi = 0, 1y = 1, if x1 = x2 = 0 y = 0, if x1 = 1, x2 = 0y = 0, if x1 = 0, x2 = 1 y = 0,
5、 if x1 = x2 = 1数学描述门的生产技术 双极性晶体管 TTL ECL 用于超高速运行的场合 金属氧化物半导体 MOS 速度慢 体积小 能耗低 CPU和存储器使用 MOS 技术门的基础作用不同个数晶体管间不同的组合方式,构成了可以完成不同逻辑运算的门。门的基础作用所有的数字电路最终是建立在晶体管可以作为一个快速的二进制的开关这个事实上的。输入不同的电压输入不同的二进制表达输出不同的二进制键盘键盘鼠标鼠标光盘光盘数据程序输出不同的电压按集成程度分: 小 规 模 : 110门 /片 中 规 模 : 10100 门/片 大 规 模 : 1001000 门/片 超大规模 : 1000+ 门/
6、片按电路逻辑功能分:组合逻辑电路时序逻辑电路门的基础作用按 何 种方式把 门 组 合 起 来 形 成 满 足 一 定功能的 电 路 呢 ?数字逻辑基础什么是逻辑? 一种思维,关于因果关系的推理规律 在已知条件为真或假的情况下,判断结论为真或假 非此即彼,类似于数字电路中的 0 和 1数字逻辑 数字电路也是研究逻辑的,即,研究输入与输出的关系 逻辑代数 也叫“布尔代数”,“开关代数” 一种数学工具,是设计和分析数字逻辑电路的基础 逻辑变量只能取 1 或 0 常用的三种逻辑运算与或非逻辑判断今天要么是周六、要么是周日,但肯定是周末。学生进入了教室并且老师进入了教室,才可以上课。小明通过了考试,小明
7、没及格。条件结论逻辑操作形式化的逻辑判断A 与 B ( AB 或 AB)A 或 B ( A+B )A 非 ( A )当 A 和 B 均为真(1)时,结果为真(1),否则为假(0)当 A 和 B 只要一个为真(1)时,结果即为真(1)当 A 为真(1),结果为假(0),反之,结果为真(1)对应的 C 语言的表达:例子:if( a != 0 & b 0 ) if( a != 0 | b 0 ) if( !a ) 逻辑运算抛开变量对的实践意义如果 A = 1, B = 0, C = 1, 那么, A 或 B 或 C = ?如果 A = 1, B = 0, C = 1, 那么, A 与 B 与 C =
8、 ?结合律 : A + (B + C ) = (A + B) + C10优先级 : ( ) 非与或,A B + C 相当于 ( (A) B ) + C布尔代数如 何 描 述 布 尔 代 数 ?布尔代数的真值表 n个变量的布尔函数的输入最多可以 ? 有种可能 因此,可以使用一个 2n 行的表格描述布尔函数的映射关系2nABX00100111两个输入变量的或函数X = A + B有 22 = 4 个可能输入ABX00100111两个输入变量的与函数X = AB有 22 = 4 个可能输入01011100布尔代数与真值表:一个稍复杂的例子 布尔函数:X = (A + B) CABCX0 0 00 0
9、 10 1 00 1 11 0 01 0 11 1 01 1 1不只是代数:与运算ABF000010100111实际的开关电路与逻辑真值表与门电路符号&ABFABF逻辑运算物理电路转换不只是代数:或运算ABF0000111011111ABFABF或逻辑真值表或门电路符号实际的开关电路逻辑运算物理电路转换不只是代数:非运算AF0110AF1AF非门电路符号非逻辑真值表实际的开关电路逻辑运算物理电路转换其他的逻辑运算ABABABA+B与非门或非门计算机的逻辑电路以与非门和或非门为基础!ABX001011101110ABX001010100110ABX000011101110ABA B + A B异
10、或门先与再非先或再非“同”为0,”不同”为1例子:一个复合的逻辑运算与或非运算:F = AB + CDABFCDA = 1B = 0C = 1D = 0F = ?AB = 0CD = 0AB + CD = 0F = 1A = 1B = 1C = 0D = 1F = ?AB = 1CD = 0AB + CD = 1F = 0Quiz指出变量 A,B 和 C 取何值时,F = 1.F(A, B, C) = AB + BC + AC0. 只要函数右边三项有一个为 1 , F = 1 即成立1. 如果 AB = 1, 要求 A 和 B 同时为 1 即可,C 可为 0 或 1.2. 类似的,B 和 C
11、都为 1 也能保证 F = 13. 如果 AC = 1,F=1 也成立,此时,A 要为 0,C 为 1,B 可为 0 或 1.一个复合的逻辑运算与一个集成门电路的功能是相同的,那么,在逻辑运算原理的基础上,用门电路构造的数字电路如何实现计算机中所需的功能呢?基本的数字逻辑部件如何构造可以实现更复杂逻辑运算的电路?非门与非门或非门组合逻辑电路 vs. 时序逻辑电路许多应用中,需要有多个输入信号和多个输出信号,并且,输出信号由当前的输入信号唯一确定,这样的数字电路叫做组合逻辑电路。输出信号不仅与输入信号有关,还与电路原来的状态有关,这样的数字电路叫做时序逻辑电路。复用器,译码器,加法器,ALU触发
12、器比较器ABX异或门ABX000101011110A 与 B 相同,则输出 0, 否则,输出 1一个异或门取反之后,就构成了一个 1位 比较器,即可以比较两个二进制位是否相等。4位比较器(1) 比较 0010 和 100110010010ABA0B0A3B3F = 0A0 异或 B0 = 1A1 异或 B1 = 1A2 异或 B2 = 0A3 异或 B3 = 1 1 或非 1 或非 0 或非 1 = 0异或门或非门(2) 比较 1100 和 1100如何构造 8 位比较器?多路复用器多路复用器有 2n 个输入,1个输出,用来选择将哪个信号输出。应用场景:比如,对数据进行并行到串行的转换。输入信
13、号控制信号输出信号译码器输入一个 n 位二进制数,根据该二进制数的值,选出 2n 个输出信号中的一个. 译码器常用在存储芯片的选择上。三-八译码器:输入三个控制信号,使八个可能输出信号中仅有一个为 1译码器输出线输出线输入信号输入信号D0A B CD1A B CD2D3D4D5D6D7译码器真值表译码器数字逻辑电路计 算 = 状态的改变 = 输入/输出映射比较 2 个二进制位比较 4 个二进制位1 个异或门4 个异或门 + 1 个或非门计算任务硬件连接方式 1连接方式 2连接方式 3连接方式 4+设计布尔代数二进制数运算基础二进制计算机中所有信息都必须是二进制的,二进制是计算机唯一能理解(处理
14、)和记得住(存储)的语言。如何计算二进制数?00001001123456704 项相加00001001two = 9 ten注意:二进制数的位从 0 开始编号进位计数制按权展开 十进制数 789.23 (基数是 10) 二进制数 101.01(基数是 2) 八进制、十六进制上述所有进制下的数按照各自的权展开求和的话,最终得到的都是十进制数值。二进制的优点如何由十进制数得到二进制数? 为什么需要这么做? 十进制到二进制转换:两种方法组合使用 对待十进制数的整数部分,使用除基取余法 对待十进制数的小数部分,使用乘基取整法如何由十进制数得到二进制数?十进制数余数余数20510251251263102
15、222222210110011最高位最低位求205 的二进制表达换算结果是: 205ten= 11001101two除基取余法遇到 0 结束如何由十进制数得到二进制数?求0.8125 的二进制表达十进制数积的整数部分积的整数部分0.81252x11.6250 x20.6251.25010.2522x0.50 x1.001最高位最低位换算结果 : 0.8125ten = 0.1101two乘基取整法遇到 1 结束如何由十进制数得到二进制数?(练习)求十进制数 34.125 的二进制表达 整数和小数部分分别转换34.125 ten = 100010.001 two如何由八进制数得到二进制数?将八进
16、制数 37.26 转换成二进制数3 7 . 2 6 011111010110.结果 : 37.26 eight = 11111.01011 two每一位八进制数可以转化为三位二进制数八进制数的基数是 8:0, 1, 2, 3, 4, 5, 6, 7如何由二进制数得到八进制数?1 0 1 1 0 . 0 0 1 1 two =2614.110 . 00111000010110.0011two = 26.14eight每三位二进制数可以转化为一位八进制数整数部分从低位向高位划分,不足三位填 0 补齐小数部分从高位向低位划分,不足三位填 0 补齐如何由十六进制数得到二进制数?十六进制数的基数是 16
17、:0, 1, 2, 3, 4, 5, 6, 7, 8, 9A, B, C, D, E, F 3 A . 0 9 0011101000001001.3A.09sixteen = 0011 1010 . 0000 1001two每一位十六进制数可以转化为四位二进制数如何由二进制数得到十六进制数?1 011 1 1 0 . 0 0 1 1 two =5D3.1110 . 00111010101110 . 0011two = 5D . 3 sixteen 每四位二进制数可以转化为一位十六制数计算机书籍(说明书)中经常用十六进制来表示二进制,为什么?二进制数的加法(笔算) 1 1 1 two 1 1 0
18、 two+1 1 0 1 two与十进制加法类似,从低位到高位逐位相加。 二进制位加法原理:0 + 0 = 0 ,1 + 0 = 1 , 1 + 1 = 0 且进位 1Quiz : 1011 + 11001 = ?二进制减法(笔算) 1 1 1 two 1 1 0 two-0 0 1 two二进制减法: 0 - 0 = 0 , 1 - 0 = 1 , 1 - 1 = 0 , 0 1 = 1 借位 1 1 1 0 1 two 1 1 0 two-1 1 1 two110two 要减去 1101two ,怎么算?二进制乘法(笔算) 1 0 0 1 ten 1 1 0 tenx0 0 0 01 0
19、0 11 0 0 11 1 0 1 1 0 ten 1 0 0 1 two 1 1 0 twox0 0 0 01 0 0 11 0 0 11 1 0 1 1 0 two无论基数是多少,乘法(笔算)的原理是相同的:移位、加和9 ten6 ten54 ten二进制除法(笔算)5 3 1 ten2 2 ten24 49 148 83 ten531 除以 22 = 24 余 31 0 1 1 0 two1 1 0 1 two11 1 0 11 0 0 110110 除以 1101 = 1 余 1001Quiz 1: 101100two 除以 1101two 等于多少?Quiz 2: 1001010tw
20、o 除以 1000two 等于多少?机器码数据在计算机中的表示无论计算机用在什么领域,信息在计算机内部的表示都是一致的,即,用 0 和 1 组成的各种编码。现在是 12 点小明的身高是 1.70 米 的值是 3.1415926今年的 GDP 增长率是 -1.2%机器如何区分正数和负数?计算机是如何完成加减法的?符号数的机器码表示 机器数 在计算机中表示的带符号的二进制数称为机器数 符号位 “+” 和“-”在机器里用 1 位二进制来表示。 通常这个符号放在二进制数的最高位,称为符号位。 用 0 表示“ +”,用 1 表示 “-”(符号也被数字化了)。 无符号数(每一位都可以表示数值) vs. 有
21、符号数 符号数与真值 带“+”或“-”符号的数叫真值 把符号数字化的数叫机器数真值给人看,机器数给机器看真真 值值机器数机器数+ 101101011- 110011100机器数的表示无符号数有符号数每一位都可以表示数值首位除外,每一位都可以表示数值8 位7 位符号位数值位机器数的表示写出机器数 01001two、11011two 的真值+ 1001two9ten- 1011two- 11ten整数机器数也常常这样表示:11011 1 ,1011机器数的表示如何在机器码中表示一般的浮点数?- 0.1011小数点的位置- 1100+ 1100+ 0.1011真值 机器数11011010111110
22、001100小数点的位置小数点的位置小数点的位置纯小数整数机器数的表示一旦符号数字化以后,符号和数值就形成了一种新的编码,在运算过程中,符号位能否和数值部分一起参加运算?如何参加运算,符号位又如何处理?这些问题与符号位和数值位所构成的编码有关系!机器数的常用表示方式: 原码 补码 反码 移码人人机器机器原码x = + 110110 x = - 110110数值位是6位x = + 0.1101x = - 0.1101符号参与了运算!n = 6原码 一种最简单的机器数表示形式 符号位为 0 表示正数,为 1 表示负数 数值位就是真值的绝对值真真 值值原码表示的原码表示的机器数机器数+ 10110,
23、1011- 11001,1100+ 0.10110. 1011- 0.11001. 1100整数原码 (x 是真值, n 是数值部分的位数):小数原码 (x是真值, n 是数值部分的位数):原码对于 0 的两种表示求真值 x = 0 的原码同理,对于整数表示的 0设 x = + 0.0000 x = - 0.0000+ 0.0000原 = 0.0000- 0.0000原 = 1.0000+ 0 原 = 0,0000- 0 原 = 1,0000由原码求真值由符号位和数值位间的符号判断给定机器码表示的是整数还是小数原码表示的机器数间的加法一个正数与一个负数相加的情况(2). 用绝对值大的机器数减去
24、绝对值小的机器数,结果的符号以绝对值大的数为准(0). 看两个机器数的符号,如果都是正(负),则进行加法运算,结果取正(负)本例中要做的是加法,结果却是需要做减法。能否找到一种机器数的表示方式,使得减法可以由加法来替代?机器模拟由人进行笔算的计算步骤:补码生活中补数的概念126931245781011126931245781011126931245781011由 6 点 到 3点有两种方式:顺时针转动 9 个格子,逆时针转动 3 个格子9 + 3 = 12如果规定顺时针方向为正、逆时针为负:9 和 -3 对时钟来讲是一样的!钟表中的补数时针从一个位置顺时针旋转 a 个格子等同于逆时针旋转 (1
25、2-a) 个格子。逆时针- 363顺时针+ 9 615126931245781011126931245781011126931245781011对于有12个刻度的钟表来说:-3 可以用 +9 来代替补数 一旦给定模,一个负数就可以对应到一个正数,因此,减法可以用加法来替代,这个正数称为该负数的“补数”。 一个负数的绝对值与其补数之和等于模。 正数的补数怎么求? 补数的概念可以推广到任意模的情况,模12,模16,模2,对于钟表:3 点 = 15 点,规定“正数的补数是其本身”生活中补数的概念为消除计算机中的减法提供了一种可能!补码整数补码 (x 是真值, n 是数值部分的位数):小数补码 (x
26、是真值, n 是数值部分的位数): 正数的补码等于其原码; 补码对于 0 只有一种表示; 求补码依然需要减法操作;补码由原码求补码= 100000= 1,011010101 + 1= 1,0110 x补 = 24+1 - 1010= 11111 + 1 - 1010= 11111 + 1- 1010- 1010例: x = -1010 时 x原 = 1,1010,除符号位以外,每位求反:1,0101(负数) 原码补码:无论是整数还是小数,原码符号位不动,数值部分求反,末位加1消除了求解补码过程中的减法操作由补码求真值x = + 0.0001由定义得:已知 x补 = 0.0001 ,求 x由定义
27、得: x = x补 2 = 1.0001 10.0000已知 x补 = 1.0001求 x= - 0.1111另一种方法:x补 x原 因为 y 是 x原除符号位外每位求反的结果:所以, x原 = 1.1111真值 x 的补码的补码补码的补码,即是 x 的原码小数补码例子反码反码常用来作为原码求补码的中间过渡整数反码 (x 是真值, n 是数值部分的位数):小数反码 (x 是真值, n 是数值部分的位数):与原码一样,反码中 0 也有两种表示方式(负数)反码:原码的符号位不变,数值位各位取反反码 正数的反码与其原码相同 负数的反码等于其原码符号位不动且数值位每位取反数值部分位数数值部分位数移码当
28、真值用补码表示时,符号位和数值位一起编码,很难从形式上看出真值的大小!010101101011011111100001 当真值用“移位后的机器码”表示时,很容易形式上看出真值的大小!移码x移 = 2n + x (2nx - 2n)设 x = + 1 1 0 0 1 0 0 x移 = 27 + 1100100 = 1, 1100100 x补 = 0,1100100设 x = 1 1 0 0 1 0 0 x移 = 27 1100100 = 0, 0011100 x补 = 1,0011100(正、负数)补码与移码只差一个符号位!例子: 通过移码比较两个机器数的大小原码、补码、反码、移码的比较 最高位
29、是符号位,其余是数值位(但机器一般不区分符号位) 正数(整数或小数)的原码、补码、反码三者相同 原码表示方法简单,直观,但是进行加减运算比较麻烦 补码表示方法易于进行加减运算:把减转换成加 负数原码的符号位不变,数值位每位取反可得到反码 负数反码的末位加 1 可得到补码 移码和补码之差一个符号位任何一个真值,均可以表示成原码、补码、反码、移码,不同的表示方式有不同的用处!数的定点表示和浮点表示小数的表示在计算机中,小数点不用专门的硬件来表示,而是按照约定的方式标出!定点表示(定点数)浮点表示(浮点数)数的定点表示Sf S1S2 Sn数符数值部分小数点位置Sf S1S2 Sn数符数值部分小数点位
30、置或定点数:小数点固定在某一个位置上的机器数,有两种格式:纯小数纯整数数的浮点表示浮点数浮点数:小数点的位置可以浮动的机器数小数点位置变化了,但是,分别乘上了10的不同幂次方,所以,值不变通常,浮点数被表示成:S : 尾数r : 基数j : 阶码在计算机中,规定浮点数的尾数用纯小数来表示将尾数高位为 1 的浮点数称为“规格化数”浮点数的表示形式jf j1 j2 jm Sf S1 S2 Sn j 阶码S 尾数阶符数符阶码的数值部分尾数的数值部分小数点位置Sf 代表浮点数的符号n 其位数反映浮点数的精度m 其位数反映浮点数的表示范围jf 和 m 共同表示小数点的实际位置浮点数的表示:例子(用原码表
31、示)010110010001000110111001假设机器数用 8 位表示浮点数,其中低 4 位表示尾数,高 4 位表示阶码那一个是规格化数?规格化浮点数的表示范围(原码表示)阶码 j尾数 S规格化浮点数阶码是整数形式,尾数是小数形式最大的正数?最小的负数?浮点数表示的溢出问题(以8位为例)010110011111011100100111规格化00111上溢:浮点数的阶码大于最大阶码下溢:浮点数的阶码小于最小阶码浮点数的表示:例子一个浮点数的机器码:尾数和阶码分别表示,然后放到机器字中二进制真值规格化浮点数真值1041 0 0 1 1 0 1 1 0 1 0 0 0 0 0 01 1 1 0
32、 0 0 1 1 0 1 0 0 0 0 0 01 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0对于负数:反码是其原码的符号位不变,数值位各位求反;补码是其反码的符号位不变,末位加1用移码和补码分别表示浮点数的阶码和尾码浮点数的表示:例子为什么常用移码来表示浮点数的阶码?用 IEEE 754 标准表示浮点数S 阶码(含阶符) 尾 数数符小数点位置短实数:32 位(1、8、23)长实数:64 位(1、11、52)临时实数:80 位(1、15、64)定 点 运 算 :移位与加法定点运算 移位 加 减 乘 除移位运算 逻辑移位:对于无符号数的移位 算术移位:对于有符号数的移位逻辑移位1
33、000110100011001000110逻辑左移 1 位左边的 1 丢失逻辑右移 1 位右边的 1 丢失00逻辑移位的规则:空位填 0算术移位对于正数,其机器数无论用原码、补码还是反码表示,移位后的空位填 0不论是正数还是负数,算术移位时,其符号位要保持不动编码方式编码方式填补代码填补代码负数原码0负数补码左移填 0右移填 1负数反码1对于负数,其机器数编码方式不同,移位后填补的代码也不同:算术移位移位操作移位操作机器数机器数(原、补、反)(原、补、反)对应的真值对应的真值移位前0, 0011010 +26左移 1 位0, 011010 0+52左移 2 位0, 11010 00+104右移
34、 1 位0, 0 001101+13右移 2 位0, 00 00110+6右移2位时,最低位丢 1,影响了精度只要移掉的不是 1,那么,左移一位则扩大一倍,右移一位则减小一倍。算术移位操作操作机器数机器数(补码)补码)真值真值移位前1, 1100110 -26左移 1 位1, 100110 0-52左移 2 位1, 00110 00-104右移 1 位1, 1 110011-13右移 2 位1, 11 11001-7操作操作机器数机器数(反码)反码)真值真值移位前1, 1100101 -26左移 1 位1, 100101 1-52左移 2 位1, 00101 11-104右移 1 位1, 1
35、110010-13右移 2 位1, 11 11001-6负数补码左移填 0,右移填 1负数反码左移、右移均填 1编码方式编码方式填补代码填补代码负数原码0负数补码左移填 0右移填 1负数反码1带进位的算术移位10001101C00011011 移位前算术左移位后定点数的加、减法运算计算机中基本运算A B = A + (-B),减法可以转换为加法来做现代计算机中,采用补码进行加减法运算补码加减法的基本公式(n 为数值位数):用补码表示的两个机器数进行加法时,把符号位与数值位同等处理,结果取模定点数加法仅能用于整数之间,或小数之间定点数的加、减法:例子 0 . 1 0 1 1+ 1 . 1 0 1
36、 11 0 . 0 1 1 0mod 2 等价于:10.0110 mod 10.0000 = 0.0110定点数的加、减法:例子总会成功么?用补码表示的机器数加减法为什么会出错?这是因为:AB = 138,超出了8位字长所能表示的范围,这种超出机器字长的现象,叫做“溢出溢出”,因此,在定点加减法中,必须判断结果是否溢出。溢出判断对于加法:只有在正数加正数,或者负数加负数时,才可能出现溢出对于减法:只有在正数减负数,或者负数减正数时,才可能出现溢出用一位符号位判断补码加减法溢出假设机器字长为 4 位用补码表示的数的范围是:8+7对于补码定点加、减法,如果参加运算的两个补码的符号相同,而结果又与原操作数的符号不同,则溢出。用两位符号位判断补码加减法溢出逗号前的两位都用来表示符号位,分别称作:“符号位进位符号位进位”、“最高有效位最高有效位”有两位符号位的补码被称作“变形补码变形补码”比使用一位符号位判断溢出的方法快。用变形补码判断溢出:例子