计算机组成原理课件-4-运算方法与运算器
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验时间初步安排
实验都在周六做,初步安排如下: 3月28日周六上午3-5节(3月30日上午不上课) 3月28日周六下午6-8节(3月30日晚上不上课) 4月25日周六上午3-5节(4月27日上午不上课) 4月25日周六下午6-8节(4月27日晚上不上课) 5月23日周六上午3-5节(5月18日上午不上课) 5月23日周六下午6-8节(5月18日晚上不上课) 5月30日周六上午3-5节(5月25日上午不上课) 5月30日周六下午6-8节(5月25日晚上不上课)
13
2、补码加减运算的溢出判断
对于加减运算,可能发生溢出的情况:同号(两数)相加, 或者异号(两数)相减。 确定发生溢出的情况: 正数相加,且结果符号位为1;(教材P105 例4.2 (1)) 负数相加,且结果符号位为0;(教材P105 例4.2 (2)) 负数-正数,且结果符号位为0;(教材P105 例4.2 (3)) 正数-负数,且结果符号位为1;(教材P105 例4.2 (4))
28
三、移码加减运算与判溢
[例] 已知x=1011,y=-1110,用移码运算方法计算 x+y,同时指出运算结果是否发生溢出。
[例] 已知x=1001,y=-1100,用移码运算方法计算 x-y,同时指出运算结果是否发生溢出。
例,教材P111例4.5
29
4.2
一 二 三
定点数的乘法运算及实现
2、补码加减运算的溢出判断
当运算结果超出机器数的表示范围时,称为溢出。计 算机必须具备检测运算结果是否发生溢出的能力,否 则会得到错误的结果。 【例】 设字长为8位(包括1位符号),若十进制数 x= –73,y= –83,用二进制补码求[x+y]补。 解: x=(–73)10=(–1001001)2,[x]补=10110111 y=(–83)10=(–1010011)2,[y]补=10101101 则 [x+y]补=10110111+10101101 =01100100 (溢出)
[-Y]补 Y0 Y1 Yn 1
若[Y]补 = Y0.Y1……Yn ,则:
[-Y]补 Y0 Y1 Yn 0.001
例: [X]补 =0.1101,则: [-X]补 = [Y]补 =1.1101,则: [-Y]补 = 1.0011 ? ? 0.0011
8
补码加法运算举例
23
补码的算术移位举例
例:设X=0.1001,Y=-0.0101,求 [X]补= 0.1001 ? [2X]补= 1.0010 ? (溢出) 0.0100 [X/2]补=? [Y]补= 1.1011 ? [2Y]补= 1.0110 ? 1.1101 [Y/2]补=?
原码、反码的算术移位举例见教材P110 例4.4。
31
4.2
定点数的乘法运算及实现
Ⅱ.用硬件乘法器和除法器实现。
硬件上:设置有由并行加法器、移位器和若干循环、 计数控制逻辑电路搭成的串行乘除法器。 指令系统:具有乘除法指令。 实现:乘除运算通过微程序一级(硬件+微程序) 来实现。 算法:在微程序中依据串行乘除运算算法,循环累 加、右移指令→乘法,循环减、左移指令→除法。 运算速度:有所提高,但硬件设计也相对复杂。 适用场合:低性能CPU。
仅仅选了理论课的同学在上述时间都不用上课。
2
本章概要
运算器
算数运算 逻辑运算
定点数运算
加减乘除运算方法 定点运算器的组成与结构
浮点数运算
加减乘除运算方法 浮点运算器的组成与结构
3
第4章 运算方法与运算器
4.1 4.2 4.3 4.4 4.5 4.6
定点数的加减运算及实现 定点数的乘法运算及实现 定点数除法运算及实现 定点运算器的组成与结构 浮点运算及运算器 浮点运算器举例 本章小结
20
二、机器数的移位运算
二进制数据(真值)每相对于小数点左移一位,相当 于乘以2;每相对于小数点右移一位,相当于除以2。 计算机中的移位运算分为: 1、逻辑移位:将移位的数据视为无符号数据,各 数据位在位置上发生了变化,导致无符号数据的数 值(无正负)放大或缩小。逻辑左移时,高位移 出,低位补“0”;逻辑右移时,低位移出,高位 补“0”。移出的数据位一般置入标志位CF(进位/ 借位标志)。 2、算术移位:将移位的数据视为带符号数据(机 器数)。算术移位的结果,在数值的绝对值上进行 放大或缩小,同时,符号位必须要保持不变。 3、循环移位:所有的数据位在自身范围内进行左 移或者右移,左移时最高位移入最低位,右移时最 低位移入最高位。若与CF标志位一起循环,称为大 循环,否则,称为小循环。
21
原码、反码的算术移位
原码的算术左移:符号位不变,高位移出,低位补0。 当左移移出的数据位为“1”时,发生溢出。 原码的算术右移:符号位不变,低位移出,高位补0。
反码的算术左移:最高有效位移入符号位,低位正数 补0,负数补“1”。 反码的算术右移:符号位不变,高位补符号位,低位 移出。
26
三、移码加减运算与判溢
移码和补码混合计算
移码运算结果判溢: 第一操作数采用移码表示,使用双符号位,规 定最高符号位为0); 第二操作数采用补码表示,使用变形补码。
27
三、移码加减运算与判溢
移码运算结果溢出的判断条件是: 当结果的最高符号位Sf1=1时溢出,Sf1=0时结果 正确。 • Sf1 Sf2=10时,结果正溢出; • Sf1 Sf2=11时,结果负溢出。 由于移码运算用于浮点数的阶码,当运算结果正 溢出时,浮点数上溢;当运算结果负溢出时,浮 点数下溢,当作机器零处理。
4
4.1 定点数的加减运算及实现
一 二 三 四 补码加减运算与运算器 机器数的移位运算 移码加减运算与判溢 十进制加法运算(自学)
5
一、补码加减运算与运算器
一 二 三 补码加减运算方法 补码加减运算的溢出判断 补码加减运算器的实现
61、Βιβλιοθήκη 码加减运算方法 补码的加减运算的公式是:
[X+Y]补 = [X]补 + [Y]补 [X-Y]补 = [X]补 + [-Y]补
0,1011 + 1,1100 0,0111
[X+Y]补 = 0, 0111
0,1011 + 0,0100 0,1111
[X-Y]补 = 0, 1111
11
补码加减运算的规则可归纳如下:
① 参加运算的操作数均为补码表示的形式; ② 加减运算可统一为加法运算进行,符号位作为数的一部 分参加运算,符号位的进位去掉; ③ 运算结果为补码形式。
例:X=+0.1011,Y=-0.0101,求X+Y 解: [X]补= 0.1011 , [Y]补= 1.1011
所以, X+Y= +0.0110 补码加法的特点: ① 符号位作为数的一部分参加运算, 符号位的进位丢掉。 ② 运算结果为补码形式。
补码减法运算举例
【例】 已知[x]补=1.1010, [y]补=1.0110, 求[x-y]补。 解: [x - y]补=[x]补+[- y]补
14
常用的判溢方法(补码加减运算)
(1) 单符号位的判溢 两操作数同号且和数的符号与操作数的符号不同。 (2) 进位判溢方法 根据教材P106 表4.2可以得到结论:
OF C n C n 1
Cn—最高位(符号位)进位,Cn-1—次高位(最高有效位)进位。 当OF=1时溢出。 也就是,当最高有效位产生的进位(Cn-1)和符号位产 生的进位(Cn)不同时,加减运算发生了溢出。
Sf1 Sf2=10,负溢出,或 Cf=1,C1=0,不同,溢出
18
3、补码加减运算器的实现
19
3、补码加减运算器的实现
核心部件:一个普通的二进制并行加法器。 A:累加器,存放[X]补;B:寄存器,存放[Y]补; 取反电路:实际上为一组两输入异或门电路。 ADD / SUB =0时,补码加法器,将B寄存器直接送入并 行加法器; ADD / SUB =1时,补码减法器,将B送入并行加法器, 同时,并行加法器的最低位产生进位,即B取反加1, 此时并行加法器的运算相当于[A]补加[-B]补 ,完成减 法运算。
24
三、移码加减运算与判溢
为什么要进行移码运算?
移码经常作为浮点数的阶码
移码主要运算
加减
三、移码加减运算与判溢
移码和移码计算
上面两式表明: 1)使用移码求和,只需直接将移码相加,并将 结果的符号位取反; 2)使用移码求差,直接将被减数移码与减数相 反数的移码相加,并将结果的符号位取反;
原码乘法及实现 补码乘法及实现
30
4.2
定点数的乘法运算及实现
由于计算机的软硬件在逻辑上具有一定的等价性,因 此实现乘除法运算,可以有三种方式: Ⅰ.用软件实现。 硬件上:设计简单,没有乘法器和除法器。 指令系统:没有乘除指令,但有加/减法和移位指 令 实现:乘除运算通过编制一段子程序来实现 算法:程序中运用串行乘除运算算法,循环累加、 右移指令→乘法,循环减、左移指令→除法。 运算速度:较慢。 适用场合:单片机。
例如:x=+0.1011, y=+0.1001, 求x+y 解: [x]补=0.1011 , [y]补=0.1001 [x]补 + [y]补 [x+y]补 0.1011 0.1001 1.0100
可见:两个正数相加的结果为负数,显然是由于溢 出造成的错误。
常用的判溢方法(补码加减运算)
(3)双符号位判溢方法 X和Y采用双符号位补码参加运算,正数的双符号位 为00,负数的双符号位为11;当运算结果的两位符 号Sf1 Sf2不同时(01或10),发生溢出。 V= Sf1 ⊕ Sf2= Xf ⊕Yf ⊕Cf⊕ Sf Sf1 Sf2=01,则正溢出;Sf1 Sf2=10,则负溢出。 但无论溢出与否,第一符号位Sf1始终表示正确的数符。
[- y]补=0.1010 ∴ [x - y]补=1.1010+0.1010 =10.0100=0.0100 (mod 2) 用真值运算并加以验算 ∵ x= - 0.0110 y= - 0.1010 ∴ x – y = - 0.0110 -(- 0.1010) = 0.0100
补码加减运算举例
例:已知X=+1011,Y=-0100,用补码计算X+Y和X-Y。 写出补码: [X]补 =0,1011 [Y]补 =1,1100 [-Y]补 =0,0100 计算:
32
4.2
定点数的乘法运算及实现
Ⅲ.用高速的阵列乘法器和阵列除法器来实现。
硬件上:设置有专用的、并行运算的阵列乘法器和 阵列除法器。 指令系统:具有乘除法指令。 实现:完全通过硬件来实现。 算法:并行乘/除法。 运算速度:很快,但硬件设计相当复杂。 适用场合:高性能CPU。
补码的算术移位
补码的算术左移:符号位不变,高位移出,低位补0。 当左移移出的数据位正数为“1”、负数为“0”时,发 生溢出。 为保证补码算术左移时不发生溢出,移位的数据最高有 效位必须与符号位相同。 在不发生溢出的前提下,用硬件实现补码的算术左移 时,直接将数据最高有效位移入符号位,不会改变机器 数的符号。 补码的算术右移:符号位不变,低位移出,高位正数补0, 负数补1,即高位补符号位。
17
双符号位判溢方法举例
例:用补码计算X+Y和X-Y (1)X=+1000,Y=+1001 (2)X=-1000,Y=1001
Sf1 Sf2=01,正溢出,或 Cf=0,C1=1,不同,溢出
Sf1 Sf2=11,无溢出,或 Cf=0,C1=0,相同,无溢出
Sf1 Sf2=00,无溢出,或 Cf=1,C1=1,相同,无溢出
特点:
使用补码进行加减运算,符号位和数值位一样参 加运算。 补码的减法可以用加法来实现,任意两数之差的 补码等于被减数的补码与减数相反数的补码之和 。
7
求补运算:[Y]补 → [-Y]补
求补规则:将[Y]补包括符号位在内每一位取反,末 位加1。 若[Y]补 = Y0,Y1……Yn ,则:
实验都在周六做,初步安排如下: 3月28日周六上午3-5节(3月30日上午不上课) 3月28日周六下午6-8节(3月30日晚上不上课) 4月25日周六上午3-5节(4月27日上午不上课) 4月25日周六下午6-8节(4月27日晚上不上课) 5月23日周六上午3-5节(5月18日上午不上课) 5月23日周六下午6-8节(5月18日晚上不上课) 5月30日周六上午3-5节(5月25日上午不上课) 5月30日周六下午6-8节(5月25日晚上不上课)
13
2、补码加减运算的溢出判断
对于加减运算,可能发生溢出的情况:同号(两数)相加, 或者异号(两数)相减。 确定发生溢出的情况: 正数相加,且结果符号位为1;(教材P105 例4.2 (1)) 负数相加,且结果符号位为0;(教材P105 例4.2 (2)) 负数-正数,且结果符号位为0;(教材P105 例4.2 (3)) 正数-负数,且结果符号位为1;(教材P105 例4.2 (4))
28
三、移码加减运算与判溢
[例] 已知x=1011,y=-1110,用移码运算方法计算 x+y,同时指出运算结果是否发生溢出。
[例] 已知x=1001,y=-1100,用移码运算方法计算 x-y,同时指出运算结果是否发生溢出。
例,教材P111例4.5
29
4.2
一 二 三
定点数的乘法运算及实现
2、补码加减运算的溢出判断
当运算结果超出机器数的表示范围时,称为溢出。计 算机必须具备检测运算结果是否发生溢出的能力,否 则会得到错误的结果。 【例】 设字长为8位(包括1位符号),若十进制数 x= –73,y= –83,用二进制补码求[x+y]补。 解: x=(–73)10=(–1001001)2,[x]补=10110111 y=(–83)10=(–1010011)2,[y]补=10101101 则 [x+y]补=10110111+10101101 =01100100 (溢出)
[-Y]补 Y0 Y1 Yn 1
若[Y]补 = Y0.Y1……Yn ,则:
[-Y]补 Y0 Y1 Yn 0.001
例: [X]补 =0.1101,则: [-X]补 = [Y]补 =1.1101,则: [-Y]补 = 1.0011 ? ? 0.0011
8
补码加法运算举例
23
补码的算术移位举例
例:设X=0.1001,Y=-0.0101,求 [X]补= 0.1001 ? [2X]补= 1.0010 ? (溢出) 0.0100 [X/2]补=? [Y]补= 1.1011 ? [2Y]补= 1.0110 ? 1.1101 [Y/2]补=?
原码、反码的算术移位举例见教材P110 例4.4。
31
4.2
定点数的乘法运算及实现
Ⅱ.用硬件乘法器和除法器实现。
硬件上:设置有由并行加法器、移位器和若干循环、 计数控制逻辑电路搭成的串行乘除法器。 指令系统:具有乘除法指令。 实现:乘除运算通过微程序一级(硬件+微程序) 来实现。 算法:在微程序中依据串行乘除运算算法,循环累 加、右移指令→乘法,循环减、左移指令→除法。 运算速度:有所提高,但硬件设计也相对复杂。 适用场合:低性能CPU。
仅仅选了理论课的同学在上述时间都不用上课。
2
本章概要
运算器
算数运算 逻辑运算
定点数运算
加减乘除运算方法 定点运算器的组成与结构
浮点数运算
加减乘除运算方法 浮点运算器的组成与结构
3
第4章 运算方法与运算器
4.1 4.2 4.3 4.4 4.5 4.6
定点数的加减运算及实现 定点数的乘法运算及实现 定点数除法运算及实现 定点运算器的组成与结构 浮点运算及运算器 浮点运算器举例 本章小结
20
二、机器数的移位运算
二进制数据(真值)每相对于小数点左移一位,相当 于乘以2;每相对于小数点右移一位,相当于除以2。 计算机中的移位运算分为: 1、逻辑移位:将移位的数据视为无符号数据,各 数据位在位置上发生了变化,导致无符号数据的数 值(无正负)放大或缩小。逻辑左移时,高位移 出,低位补“0”;逻辑右移时,低位移出,高位 补“0”。移出的数据位一般置入标志位CF(进位/ 借位标志)。 2、算术移位:将移位的数据视为带符号数据(机 器数)。算术移位的结果,在数值的绝对值上进行 放大或缩小,同时,符号位必须要保持不变。 3、循环移位:所有的数据位在自身范围内进行左 移或者右移,左移时最高位移入最低位,右移时最 低位移入最高位。若与CF标志位一起循环,称为大 循环,否则,称为小循环。
21
原码、反码的算术移位
原码的算术左移:符号位不变,高位移出,低位补0。 当左移移出的数据位为“1”时,发生溢出。 原码的算术右移:符号位不变,低位移出,高位补0。
反码的算术左移:最高有效位移入符号位,低位正数 补0,负数补“1”。 反码的算术右移:符号位不变,高位补符号位,低位 移出。
26
三、移码加减运算与判溢
移码和补码混合计算
移码运算结果判溢: 第一操作数采用移码表示,使用双符号位,规 定最高符号位为0); 第二操作数采用补码表示,使用变形补码。
27
三、移码加减运算与判溢
移码运算结果溢出的判断条件是: 当结果的最高符号位Sf1=1时溢出,Sf1=0时结果 正确。 • Sf1 Sf2=10时,结果正溢出; • Sf1 Sf2=11时,结果负溢出。 由于移码运算用于浮点数的阶码,当运算结果正 溢出时,浮点数上溢;当运算结果负溢出时,浮 点数下溢,当作机器零处理。
4
4.1 定点数的加减运算及实现
一 二 三 四 补码加减运算与运算器 机器数的移位运算 移码加减运算与判溢 十进制加法运算(自学)
5
一、补码加减运算与运算器
一 二 三 补码加减运算方法 补码加减运算的溢出判断 补码加减运算器的实现
61、Βιβλιοθήκη 码加减运算方法 补码的加减运算的公式是:
[X+Y]补 = [X]补 + [Y]补 [X-Y]补 = [X]补 + [-Y]补
0,1011 + 1,1100 0,0111
[X+Y]补 = 0, 0111
0,1011 + 0,0100 0,1111
[X-Y]补 = 0, 1111
11
补码加减运算的规则可归纳如下:
① 参加运算的操作数均为补码表示的形式; ② 加减运算可统一为加法运算进行,符号位作为数的一部 分参加运算,符号位的进位去掉; ③ 运算结果为补码形式。
例:X=+0.1011,Y=-0.0101,求X+Y 解: [X]补= 0.1011 , [Y]补= 1.1011
所以, X+Y= +0.0110 补码加法的特点: ① 符号位作为数的一部分参加运算, 符号位的进位丢掉。 ② 运算结果为补码形式。
补码减法运算举例
【例】 已知[x]补=1.1010, [y]补=1.0110, 求[x-y]补。 解: [x - y]补=[x]补+[- y]补
14
常用的判溢方法(补码加减运算)
(1) 单符号位的判溢 两操作数同号且和数的符号与操作数的符号不同。 (2) 进位判溢方法 根据教材P106 表4.2可以得到结论:
OF C n C n 1
Cn—最高位(符号位)进位,Cn-1—次高位(最高有效位)进位。 当OF=1时溢出。 也就是,当最高有效位产生的进位(Cn-1)和符号位产 生的进位(Cn)不同时,加减运算发生了溢出。
Sf1 Sf2=10,负溢出,或 Cf=1,C1=0,不同,溢出
18
3、补码加减运算器的实现
19
3、补码加减运算器的实现
核心部件:一个普通的二进制并行加法器。 A:累加器,存放[X]补;B:寄存器,存放[Y]补; 取反电路:实际上为一组两输入异或门电路。 ADD / SUB =0时,补码加法器,将B寄存器直接送入并 行加法器; ADD / SUB =1时,补码减法器,将B送入并行加法器, 同时,并行加法器的最低位产生进位,即B取反加1, 此时并行加法器的运算相当于[A]补加[-B]补 ,完成减 法运算。
24
三、移码加减运算与判溢
为什么要进行移码运算?
移码经常作为浮点数的阶码
移码主要运算
加减
三、移码加减运算与判溢
移码和移码计算
上面两式表明: 1)使用移码求和,只需直接将移码相加,并将 结果的符号位取反; 2)使用移码求差,直接将被减数移码与减数相 反数的移码相加,并将结果的符号位取反;
原码乘法及实现 补码乘法及实现
30
4.2
定点数的乘法运算及实现
由于计算机的软硬件在逻辑上具有一定的等价性,因 此实现乘除法运算,可以有三种方式: Ⅰ.用软件实现。 硬件上:设计简单,没有乘法器和除法器。 指令系统:没有乘除指令,但有加/减法和移位指 令 实现:乘除运算通过编制一段子程序来实现 算法:程序中运用串行乘除运算算法,循环累加、 右移指令→乘法,循环减、左移指令→除法。 运算速度:较慢。 适用场合:单片机。
例如:x=+0.1011, y=+0.1001, 求x+y 解: [x]补=0.1011 , [y]补=0.1001 [x]补 + [y]补 [x+y]补 0.1011 0.1001 1.0100
可见:两个正数相加的结果为负数,显然是由于溢 出造成的错误。
常用的判溢方法(补码加减运算)
(3)双符号位判溢方法 X和Y采用双符号位补码参加运算,正数的双符号位 为00,负数的双符号位为11;当运算结果的两位符 号Sf1 Sf2不同时(01或10),发生溢出。 V= Sf1 ⊕ Sf2= Xf ⊕Yf ⊕Cf⊕ Sf Sf1 Sf2=01,则正溢出;Sf1 Sf2=10,则负溢出。 但无论溢出与否,第一符号位Sf1始终表示正确的数符。
[- y]补=0.1010 ∴ [x - y]补=1.1010+0.1010 =10.0100=0.0100 (mod 2) 用真值运算并加以验算 ∵ x= - 0.0110 y= - 0.1010 ∴ x – y = - 0.0110 -(- 0.1010) = 0.0100
补码加减运算举例
例:已知X=+1011,Y=-0100,用补码计算X+Y和X-Y。 写出补码: [X]补 =0,1011 [Y]补 =1,1100 [-Y]补 =0,0100 计算:
32
4.2
定点数的乘法运算及实现
Ⅲ.用高速的阵列乘法器和阵列除法器来实现。
硬件上:设置有专用的、并行运算的阵列乘法器和 阵列除法器。 指令系统:具有乘除法指令。 实现:完全通过硬件来实现。 算法:并行乘/除法。 运算速度:很快,但硬件设计相当复杂。 适用场合:高性能CPU。
补码的算术移位
补码的算术左移:符号位不变,高位移出,低位补0。 当左移移出的数据位正数为“1”、负数为“0”时,发 生溢出。 为保证补码算术左移时不发生溢出,移位的数据最高有 效位必须与符号位相同。 在不发生溢出的前提下,用硬件实现补码的算术左移 时,直接将数据最高有效位移入符号位,不会改变机器 数的符号。 补码的算术右移:符号位不变,低位移出,高位正数补0, 负数补1,即高位补符号位。
17
双符号位判溢方法举例
例:用补码计算X+Y和X-Y (1)X=+1000,Y=+1001 (2)X=-1000,Y=1001
Sf1 Sf2=01,正溢出,或 Cf=0,C1=1,不同,溢出
Sf1 Sf2=11,无溢出,或 Cf=0,C1=0,相同,无溢出
Sf1 Sf2=00,无溢出,或 Cf=1,C1=1,相同,无溢出
特点:
使用补码进行加减运算,符号位和数值位一样参 加运算。 补码的减法可以用加法来实现,任意两数之差的 补码等于被减数的补码与减数相反数的补码之和 。
7
求补运算:[Y]补 → [-Y]补
求补规则:将[Y]补包括符号位在内每一位取反,末 位加1。 若[Y]补 = Y0,Y1……Yn ,则: