收藏 分享(赏)

第5章:运算方法与运算器.ppt

上传人:fmgc7290 文档编号:6221893 上传时间:2019-04-02 格式:PPT 页数:37 大小:275.50KB
下载 相关 举报
第5章:运算方法与运算器.ppt_第1页
第1页 / 共37页
第5章:运算方法与运算器.ppt_第2页
第2页 / 共37页
第5章:运算方法与运算器.ppt_第3页
第3页 / 共37页
第5章:运算方法与运算器.ppt_第4页
第4页 / 共37页
第5章:运算方法与运算器.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

1、通过前面的学习,我们已经知道了数据在计算机中是如何表示,那么它们是怎么参加运算的呢?或者说运算器是怎样工作的呢?要明白这个问题就是我们在这一章要学习的算术、逻辑运算的方法。,第5章 运算方法和运算器,1 移位运算和舍入操作,一、移位运算1、意义移位运算是计算机中最基本、最常见的运算操作之一。任何计算机都含有移位指令。移位操作有两种: (1)逻辑移位:寄存器中整组数据进行移位,空位补0,只有数字位置的变化,无数量变化。 (2)算术移位:寄存器中带符号数的移位,移位时,符号位保持不变,仅数量变化。在此仅讨论算术移位:当机器字长固定,左、右移位时,出现空位怎么办?,2、算术移位的规则大前提是:移位后

2、,符号位保持不变。 (1)正数:正数的符号位为0,且x原=x反=x补,故进行算术移位时,出现的空位均补0.例如:x原=0.1001, 2x原=0.0010;x反=0.0011, x反=0.0001;x补=0.1001 2x补=0.0010; (2)负数:原码的移位:除符号位外,原码的数值部分与真值相同,故移位后都补0.x原=1,0111 2x原=1,1110 x原=1,0011反码的移位:除符号位外,反码的数值部分与原码相反,故移位后都补1.x反=1,0111 2x反=1,1111 x反=1,1011 补码的移位:除符号位外,左移补0,右移补1,3、练习设X=-0.1001010,求:(1)X

3、的原码左移2位、右移2位各是多少?(2)X的反码左移2位、右移2位各是多少?(3)X的补码左移2位、右移2位各是多少?,思考:2x补=2x补成立吗? x补= x补成立吗? 解答:当x=0时,在不溢出的情况下,上述二式成立;当x0时,在不溢出的情况下,2x补=2x补成立,而 x补= x补不成立。 如:x=-0.0001,字长5位。x=-0.0000 x补=1.1111, x补=1.1111 x补=0.0000 又如:x=-0.10101,字长6位。x补=1.10101 x补=1.10110,二、舍入操作在算术移位时,由于硬件的限制,会失去一定的位数,造成一些误差。为减少误差,就要进行舍入操作。

4、(1)恒舍(切断):多余的部分全部舍去 (2)冯诺依曼舍入法:末位恒置1 (3)0舍1入法: (4)ROM舍入法(查表法),2 定点数加减法,我们来分析一下:由该例可知真值X和Y所表示的十进制数分别为(69)10和(103)10,其和为(172)10,该数用二进制数为+10101100,在机器中表示这个数需要9位。而现在机器的字长为8位,无法表示,我们把这种现象称为“溢出”(overflow)。类似的,当两个负相加,如果和正,也同样属于溢出现象。而两个异号数相加是不可能产生溢出现象的。我们再看一个例子。,例2:设机器字长为8位,X=-1000011,Y=-0100001,求X+Y 解: X补=

5、10111101+Y补=11011111X补+Y补=110011100 即X+Y补=X补+Y补=10011100 求得X+Y=-1100100 结果正确,从上面两个例子来看,一会儿是溢出,一会儿又是对,同学们是不是会问:我们怎么知道哪一种是溢出,哪一种又不是?有没有办法一下子就能判断出来呢?回答是肯定的。那就是采用多个符号位。我们把符号位用多位表示所得机器数的表示形式称为变形码。 变形码也有变形原码,变形反码和变形补码三种形式。变形码的原码,反码和补码之间的关系和一般的原码、反码和补码之间的关系一样。,三、变形补码加法对于变形补码,同样有:X+Y变补=X变补+Y变补 用这个式子进行加法运算就能

6、及时判断出溢出。我们用这个式子来计算上述 例1和例2(符号用两位表示)。其结果为01,0101100和11,0011100。前者溢出,后者没溢出。这说明,当和的两个符号位不相同时,就说明发生了溢出。讲到这里,判断溢出是解决了,但怎么解决溢出呢?,方法是这样的:将每一个加法同时除以比例因子2i,然后相加,其结果再乘以2i,即为所得。 我们来验证一下例1: 选比例因子2: X变补=00,0110011 Y变补=00,0100010 X变补+ Y变补=00,1010101 即 (X+Y)变补=00,1011010(X+Y)=00,0101011 X+Y=00,10101100 正确,3 定点原码乘法

7、,利用原码作乘法,其方法是: 1、乘积的符号等于两数的符号位异或的结果。 2、乘积的数值等于两数绝对值的积 原码乘法的实质是两个正数相乘。,由此例可以看出:手算乘法是通过移位和加法来实现的。存在如下缺点: (1)n位乘法,需n个数相加的部分积,而全加器只有三个输入端,故实现不了。 (2)n位乘法,乘积为2n位,要用2n位的寄存器来存放积,造成浪费。 (3)若用加法器做加法,n位乘法,需2n位的加法器,也造成硬件浪费。于是,在计算机中不能采用这种手算乘法,我们必须想办法达到: (1)n位乘法,只用n位的加法器,且只用两数相加的加法器。 (2)n位乘法,只用n位的寄存器来存放积。,下面将两数做乘法

8、的过程作一些变形。设被乘数为X,乘数为Y=0.1011 XY=X0.1011=X0.1+X0.00+X0.001+X0.0001 =2-1(X+2-1 (0+ 2-1 (X + 2-1X)) =2-1(X+2-1 (0+ 2-1 (X + 2-1(X+0))) 由上式可以推导出如下规则:(1)两数相乘之前,设初始部分积为全0(位数和被乘数的位数相同)。(2)从乘数的个位乘起,乘数位为1,部分积加被乘数后结果右移一位;乘数位为0,部分积加0后结果右移一位。(3)重复上述操作,直到乘数位全部乘完为止。,2、部分积右移法 方法是:部分积相加后右移一位,直到乘数各位都乘完为止。,二、原码2位乘法(不作

9、要求) 对乘数从右至左,每两位分成一组,称为判断位,共有四种可能:00,01,10,11 (1)对于00:将上次部分积右移2位 (2)对于01:上次部分积加被乘数,再右移2位 (3)对于10:上次部分积加被乘数的2倍(被乘数左移1位),再右移2位 (4)对于11:上次部分积减被乘数,右移2位,再在下一个判断位+1,例:-0.11010.1011,4 定点原码除法,定点除法只考虑被除小数小于除数的情况,因为这样总能保证商的小数点就在最左边位有效数字的前面。 一、恢复余数法 方法: 1、将Y与2Ri( Ri左移1位,Ri为上次的余数)比较如果2Riy 表示够减,则商为1如果2RiY,表示不够减,则

10、商为0 2、够减和不够减的方法2Ri+-Y补,即2Ri-y补如果余数为正,则说明够减,商为1,如果余数为负,则说明不够减,商为0。这一步操作仅是为了判断减和不够减的问题,所以是不该做,因此要把除数再加回去,以恢复成原来的余数。恢复余数法由此而得名,二、加减交替法我们先回顾一下恢复余数法,采用 =2Ri-1+(-Y),当Ri0时,同时恢复余数,采取的方法是Ri+Y,则Ri+1=2(Ri+Y)+(-Y)=2Ri+Y 这个式子说明:当 0,商0时,Ri+1可直接将Ri左移一位,再加上Y得出,而不必将Ri左移+-Y,然后再+Y。,不管是余数恢复法还是加减交替法,都有两点值得提醒同学们: 1、当有余数的

11、时候,除到什么时候为止? (1)视题目要求的精度 (2)商的位数和被除数的位数一样即可 2、当商的最后位为0时,余数不要忘了加上除数,才是真正的余数。,5 规格化浮点运算,一、规格化浮点补码加减法要对两浮点数进行加减法,需使其阶码相等。如x=0.1101102011,y=-0.0010112110 1、对阶小阶向大阶看齐要使两数的阶码相等,可通过移动尾数来进行。尾数左移,阶码减小,尾数高位损失;尾数右移,阶码增加,尾数精度损失。一般采取后一种办法。移动位数:J=Jx-JyX补=00,011;00.110110 Y补=00,110;11.110101J补=Jx补+-Jy补=00,011+11,0

12、10=11,101J=-3说明:X要向Y看齐,得X补=00,110;00.000110,2、尾数求和00.000110 00.000110+11.110101 + 00.00101111.111011 00.010001X+Y补=00,110;11.111011X-Y补=00,110;00.010001 观察结果是否为规格化形式,如果不是必须规格化。 3、结果规格化 根据规格化的定义:补码正数应满足00.1的形式;补码负数应满足11.0的形式。 (1)若尾数求和后出现以下情况:01.或10.时,表示运算结果产生溢出,需要进行向右规格化。右规的方法是:尾数连同符号位右移1位,阶码加1,直到成为规

13、格化数。 (2)若尾数求和后出现以下情况:00.0或11.1时,表示运算结果为非规格化数,需要进行向左规格化。左规的方法是:尾数连同符号位左移1位,阶码减1,直到成为规格化数。 X+Y补=00,011;11.011000 左移3位 X-Y补=00,101;00.100010 左移1位,4、舍入对阶右规时,都要右移尾数,使尾数的低位丢失,造成误差,故都要进行舍入处理。(1)0舍1入法 (2)末位恒置1 5、溢出检查:若阶码超出表示范围为浮点溢出,正溢出称为上溢,为软件故障,应请求CPU予以处理,负溢出称为下溢,置运算结果为浮点形式的机器零。 练习:设浮点数格式为,;.,X=-19/128,Y=1

14、17/128,用浮点补码规则求XY=?,二、规格化浮点补码乘除法运算(不作要求)规则: (1)阶码运算:阶码求和(乘法)或阶码求差(除法)(定点整数加法)。 (2)浮点数的尾数处理:采用定点小数的乘除法运算,结果要进行舍入处理。,6 定点运算器设计,运算器是实现数据的算术运算和逻辑运算的部件,是CPU的一个重要组成部分。 一、运算器的基本结构(如下图),(1)ALU:算术逻辑运算单元,是运算器的核心部件。 (2)寄存器A:既存放原始数据,又存放中间结果,故称为累加器 (3)寄存器B:具有求反功能 (4)”+1”:实现求补,连同B的求反功能 (5)移位寄存器:乘除运算时使用。,二、加减法运算器

15、1、基本的算术逻辑运算部件全加器(如下图) 输入端3个:Ai,Bi本位操作数,Ci-1低位来的进位。 输出端2个:Si本位和,Ci本位向高位的进位。2、串行的加减法运算器(如下图)(1)A,B:具有移位功能的寄存器,且A存放运算结果 (2)D触发器:保存进位。串行运算器所用元器件少(1位全加器),但速度低,因此,现在用的不多,现在惯常使用的是并行加法器。,3、并行加法器参加运算的两个数各位同时进行加法运算,即两数相加一次完成,为了实现这种要求,必须要解决两个问题: (1)加法器如何构成? (2)进位问题如何解决?对于第一个问题解决起来较容易:只要保证参加运算的数据有几位,就用几位全加器就可以,

16、而参加运算的数据的位数与计算机的字长相同。例如:计算机字长为8位,并行加法器就需要8个全加器来组成。对于第二个问题比较麻烦,但解决的方法不少。,(1)串行进位法:将各全加器的进位用一根据号线串接在一起。如右图所示 这种方法的优缺点: 优点:电路简单。 缺点:运行速度慢。因为每一位进位的产生是需要延迟时间的,随着全加器数目的增多,累计延迟时间将会越来越大。,(2)并行进位法 (超前进位,先行进位):指所有的进位都由C0直接产生。 全加器(FA)的函数表达式Si=AiBiCi-1Ci=AiBi+(Ai+Bi)Ci-1 令Gi= AiBi,Pi= Ai+Bi ,则Ci=Gi+PiCi-1 其中Gi称

17、为产生函数:只有本位两个输入全为1时,才会产生向高位的进位。Pi称为进位传递函数:只要本位两个输入有一个为1时,低位来的进位就能传送到高位。,上述各式中所有各位的进位均不依赖于低位的进位,各位的进位可以同时产生。 特点: (1)一旦C0,G,P形成后,最多只有两级门的延时即可形成Cn,是速度最快的一种进位链。 (2)n位字长,Cn产生共需2T延时,但此方案的扇入系数太大(一个门需要的输入端太多),n位要n+1个输入端,无法用元器件实现。故称为理想进位链。,(3)分组进位法 (若干位分成一组) 组内并行进位,组间串行进位;组内串行进位,组间并行进位;组内并行进位,组间并行进位。 将n位加法分组,

18、组内用并行进位链,组间用串行进位链。如12位加法器可以分成4组,每组3位。,加法器共延时=2T4+4T=12T采用这种做法有一个问题需要思考:分组可以多种多样,共分几组?多少位一组?组内位数是否相等? 这取决于机器的字长,对进位链速度的要求以及元器件的性能等。 特点:速度高,但线路复杂,成本高。,三、基本结构 运算器的基本结构有三种形式:(1)单总线结构 (2)双总线结构 (3)三总线结构 1、单总线结构 只有一条数据总线,因此,参加运算的数据必须分步送入锁存器A和B。这样一来就导致了运行速度慢的缺点,但由于只采用一条总线,控制是工作的电路简单。,2、双总线结构采用两条数据总线,这样就可以把参

19、加运算的两个操作的同时送人ALU进行运算,结果送人锁存器通用寄存器锁存器标志寄存器很显然,这种结构同但总线结构相比,速度快,但增加了一条总线,控制电路自然要复杂一些,3、三总线结构采用三条数据总线,其中两条用于同时送操作数进入ALU,另一条直接送出结果,整个运算一次完成。通用寄存器状态标志寄存器总线旁路器 优点:运算速度快。 缺点:增加了总线旁路器,控制复杂。,7 协处理器,协处理器是专门用来实现浮点运算的。当然它必须与处理器配对使用。协处理器有8087,80287,80387三种。其中8087与8086/8088配对,80287与80286,82386配对;80387与80386以上的处理器

20、配对。早期的协处理器是一个独立的芯片,安装在主板上,到了80586以后,已经集成到了CPU中。我们在本节主要简单介绍一下80287和80387 一、性能 80287和80387都是高性能的协处理器,80387在80287的基础上扩展了三角函数的功能。 1、都具有80位体系结构 2、时钟频率高(1)287工作频率为8MHZ 12MHZ(2)387工作频率为16MHZ 20MHZ 3、能处理7种数据类型 单字整数(16位)短整数(32位)长整数(64位) 装配十进制数(80位)单精度(32位)双精度(64位)临时浮点数(80位) 4、可工作于两种模式 (1)实模式:把80286/80386当作高速

21、8086使用,使用24位地址中的低20位,全部可用存储空间是整个主存的最低1MB (2)保护模式:可使用16MB的主存空间支持虚拟存储器管理。 5、能检测数据运算的六种错误:(1)非法处理 (2)非法操作数 (3)零作除数 (4)上溢 (5)下溢 (6)精度下降,二、协处理器的内部结构 不管是8087还是80287,80387,其内部结构基本相同,都含有: (1) 8个80位的寄存器堆栈(先进后出) (2) 3个16位的寄存器(控制字,状态字,特征字) (3) 2个32位的寄存器(指令指针,数据指针) 1、特征字寄存器:16位长,每两位表示寄存器栈一个寄存器的状态,该寄存器的内容允许用户读写。

22、 2、控制字寄存器:16位长,用于控制协处理器的内部操作。 3、状态字寄存器:16位长,用于表示协处理器的处理情况。 4、寄存器堆栈:8个,每个80位。 (1)8 个寄存器是一个头尾相接的整体。单分别用07表示其编号。 (2)位于顶上的一个称为栈顶寄存器,并用ST表示。 (3)用ST(i)访问相对于栈顶寄存器的偏移量为i的寄存器。i不是寄存器的编号。,三、80287和80387的硬件特性: 1、80287的硬件特性 (1) 采用HMOS工艺,40引脚,双列直插式封装 (2) 分两级操作,彼此相互独立。第一级同系统总线连接,接收并译码指令。请求同系统存储器传送操作数,以及执行协处理的控制指令。第

23、二级执行实际的数值运算。 (3) 具有84位宽度的内部数据通路。 (4) 一次操作仅能执行一条指令。 2、80387的硬件特性: (1) 采用1.5m的高速CHMOS工艺、68引脚、PGA封装,速度快,功耗低。 (2) 采用彼此独立的三级操作: 第一级同系统总线连接;第二级是数据接口和控制接口;第三级执行浮点运算 (3) 具有84位宽度的内部数据通路 (4) 一次操作仅能执行一条指令。,四、协处理器的工作方式 1、 作为80386等处理器的外设 (1) 80387的指令是由80386进行读取。 (2) 80387访问存储器由80386生产地址。 2、占用专用的I/O端口:800000F8H80

24、0000FFH 3、80387与80386同步工作。,8 应用举例,例1:写出下列十进制数的单精度IEEE754编码 (1)x=0.625 (2)x=-9 解:(1)0.625D=0.101B=1.012-1,根据IEEE754的单精度表达式,该二进制数可表示为: (-1)01.012126-127。其中,尾数符号位s=0(为正数),f为小数点后的数值,f=01,实际阶码为-1,e-127=-1,得e=126D=01111110B x的IEEE754的单精度数表示为:0 01111110 01000000000000000000000 (2)-9D=-1001B=-1.00123,根据IEEE

25、754的单精度表达式,该二进制数可表示为: (-1)-11.0012130-127。其中,尾数符号位s=1(为负数),f为小数点后的数值,f=001,实际阶码为3,e-127=3,得e=130D=10000010B x的IEEE754的单精度数表示为:1 10000010 00100000000000000000000 【点评】:求IEEE754编码时,首先要把任意进制的数转换成形式为(1.XXXXX)2k的二进制数,然后再转化成为IEEE754的单精度表达式(-1)s1.f2e-127。这样就可得s,e,f的值,最后根据s,e,f的值写出对应的IEEE754标准代码。,例2:求IEEE754

26、单精度数C0400000H对应的是进制数。 解:c0400000H=1 10000000 10000000000000000000000,符号位为1,f为1(0.5),e为10000000B=128D,则IEEE754表达式为:(-1)1(1+0.5)128-127=-11.521=-1.52=-3.0例3:已知:x=B4H,y=5DH,求:xy,xy,xy。 解:x=B4H=10110100B,y=5DH=01011101B 则xy=1011010001011101=14H Xy=1011010001011101=FDH xy=1011010001011101=E9H,例4:设阶码为4位补码

27、,尾数为7为补码,均包含符号位,用浮点运算计算x+y。 (1)x=2-30.010101,y=2-5(-0.001001) (2)=x=-25,y=35 解:(1)x补=1101,00.010101,y补=1011,11.110111对阶:y的阶码比x的阶码小2,y的尾数右移2位,阶码加2y补=1011,11.110111=1101,11.11110111尾数相加:00.010101+11.11110111=00.01001011规格化:将尾数左移1位,阶码减1x+y补=1101,00.01001011=1100,00.1001011舍入:按“0”舍“1”入规则 x+y补=1100,00.10

28、01011=1100,00.100110故x+y=2-40.100110 (2) x=-25D=-11001B=25(-0.110010),y=35D=100011B=260.100011x补=0101,11.001110,y补=0110,00.100011对阶:x的阶码比y的阶码小1,x的尾数右移1位,阶码加1x补=0101,11.001110=0110,11.100111尾数相加:11.100111+00.100011=00.001010规格化:将尾数左移2位,阶码减2x+y补=0110,00.001010=0100,00.101000故x+y=240.101000,例5:已知X为下列数据

29、:0.1010,0,-0,-0.1010,请写出每一个数的: X原,X补,X/2原,X/2补,2X原, 2X补。 解: (1)当X=0.1010时, X原=0.1010,X补=0.1010,X/2原=0.01010, X/2补=0.01010,2X原和 2X补因溢出无法表示 (2)当X=0时, X原=0.0000,X补=0.0000,X/2原=0.0000, X/2补=0.0000,2X原=0.0000, 2X补=0.0000 (3)当X=-0时, X原=1.0000,X补=0.0000,X/2原=1.0000, X/2补=0.0000,2X原=1.0000, 2X补=0.0000 (4)当X=-0.1010时, X原=1.1010,X补=1.0110,X/2原=1.01010, X/2补=1.10110,2X原和 2X补因溢出无法表示,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初级教育 > 小学教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报