计算机组成原理 第三章

复习内容

a) 掌握补码的加、减法运算方法及溢出检测方法;

b) 掌握原码与补码的乘法;(详细的计算过程)

c) 知道浮点加减法运算的一般性步骤(5 个步骤:对阶/尾数运算/规格化/舍入/溢出

判断)

3.1基本算数运算的实现

  • 逻辑移位(无符号数的移位)
    • 逻辑移位——数值增大一倍——数乘以2
    • 右移一位——数值缩小一倍——数除以2
  • 移动规则

  • 算数移位(带符号数的移位)
    • 符号不变
    • 左移一位——数值增大一倍——数乘以2
    • 右移一位——数值缩小一倍——数除以2
  • 移位规则
    • 负数左移
      • X=-0.X1X2…XK100…000
      • [X]原=1.X1X2…XK100…000
      • [X]补 =1.X1X2…XK100…000
    • 负数右移
      • X=-0. 00…000X1X2…XK1
      • [X]原=1. 00…000X1X2…XK1
      • [X]补 =1.11…111X1X2…XK1
  • 补码算术右移:低位移出,高位补符号位

3.2定点加减法运算

3.2.1补码加减法运算方法

补码加法

  • 补码加法
    • [X+Y]补=[X]补+[Y]补

补码加法运算规则:

  • (1)参加运算的两个操作数均用补码表示
  • (2)符号位作为数的一部分参加运算
  • (3)两数直接相加,符号位产色的进位自然丢掉
  • (4)运算结果用补码表示

例题:

补码减法

  • 补码减法
    • [X-Y]补=[X+(-Y)]补=[X]补+[-Y]补
    • 已知[Y]补求[-Y]补的方法是: [-Y]补=[[Y]补]变补
    • 变补:将[Y]补连同符号位一起取反,末位加“1”
  • 补码减法运算规则
    • (1)参加运算的两个操作数均用补码表示
    • (2)符号位作为数的一部分参加运算
    • (3)将被减数与减数的机器负数相加,符号位产生的进位自然丢掉
    • (4)运算结果用补码表示

例题:

3.2.2溢出及检测

  • B是二进制,D是十进制

  • 正溢出:两个正数相加的结果 > 机器所能表示的最大正数((2n-1)/(1-2-n))
  • 负溢出:两个负数相加的结果 < 机器所能表示的最小负数(-2n/-1)
  • 出现溢出后,机器将无法正确表示,因此必须正确判别溢出并及时加以处理

  • 溢出检测方法
    • 设:被操作数为:[X]补=Xs,X1X2…Xn
    • 操作数为:[Y]补=Ys,Y1Y2…Yn
    • 其和(差)为:[S]补=Ss,S1S2…Sn

  • 采用进位位
    • 两数运算时,产生的进位为Cs,C1,C2...Cn
      • Cs:符号位产生的进位
      • C1:为最高数值位产生的进位

  • 采用变形补码(双符号位补码)
    • 被操作数为:[X]补=Xs1Xs2,X1X2…Xn
    • 操作数为:[Y]补 Ys1Ys,Y1Y2…Yn
    • 其和(差)为:[S]补= Ss1 Ss2,S1S2…Sn

例题:

3.2.3加减法的逻辑实现

3.3定点乘法运算

3.3.1原码一位乘法

  • 原码一位乘法的规则为:
    • (1)参加运算的操作数取其绝对值
    • (2)令乘数的最低位为判断位,若为“1”,加被乘数,若为“0”,加0
    • (3)累加后的部分积右移一位
    • (4)重复n次②和③
    • (5)符号位单独处理,同号为正,异号为负

练习:

-0.1001×0.1101

3.2.2补码一位乘法

  • Booth乘法
  • 被乘数[X]补=Xs.X1X2…Xn
  • 乘数[Y]补=Ys.Y1Y2…Yn Yn+1(=0)
  • 每次运算取决于乘数相邻两位Yi、Yi+1的值
  • 乘数相邻两位的比较结果(Yi+1-Yi)来确定运算操作

  • 运算规则
    • 参加运算的数用补码表示
    • 符号位参加运算(被乘数与部分积取双符号位)
    • 乘数最低位后面增加一位附加位Yn+1,其初值为0
    • 由于每求一次部分积要右移一位,所以乘数的最低两位Yn、Yn+1的值决定了每次应执行的操作
    • 移位按补码右移规则进行(右移空出的有效最高位补符号位,双符号位时补第1符号位)
    • 共需做n+1次累加,n次移位,第n+1次不移位

习题

[2009]一个C语言程序在一台32位机器上运行,程序中定义了3个变量x、y、z,其中x和z是int型,y为short型。当x=127,y=-9时,执行赋值语句z=x+y后,x、y、z的值分别是__C__

A.x=0000007FH,y=FFF9H,z=00000076H

B.x=0000007FH,y=FFF9H,z=FFFF0076H

C.x=0000007FH,y=FFF7H,z=FFFF0076H

D.x=0000007FH,y=FFF7H,z=00000076H

[2010]假定有4个整数用8位补码分别表示r1=FEH,r2=F2H,r3=90H,r4=F8H,若将运算结果存放在一个8位的寄存器中,则下列运算会发生溢出的是__B__

A.r1×r2 B.r2×r3 C.r1×r4 D.r2×r4

[2013]某字长为8位的计算机中,已知整型变量x、y的机器数分别为[x]补=11110100,[y]补=10110000。若整型变量z=2*x+y/2,则z的机器数为___A___

A.11000000 B.00100100 C.10101010 D.溢出

[2018]假定带符号整数采用补码表示,若int型变量x和y的机器数分别是FFFF FFDFH和0000 0041H,则x、y的值以及x-y的机器数分别是___C___

A.x=-65,y=41,x-y的机器数溢出 

B.x=-33,y=65,x-y的机器数为FFFF FF9DH

C.x=-33,y=65,x-y的机器数为FFFF FF9EH

D.x=-65,y=41,x-y的机器数为FFFF FF96H

[2018]整数x的机器数为1101 1000,分别对x进行逻辑右移1位和算术右移1位操作,得到的机器数各是__A__    

A. 1110 1100、1110 1100   B. 0110 1100、1110 1100

C. 1110 1100、0110 1100   D. 0110 1100、0110 1100

[2019]浮点数加减运算过程一般包括对阶、尾数运算、规格化、舍入和判断溢出等步骤。设浮点数的阶码和尾数均采用补码表示,且位数分别为5位和7位(均含2位符号位)。若有两个数X=27×29/32,Y=25×5/8,则用浮点加法计算X+Y的最终结果是___A___

A.001111100010 B.001110100010

C.010000010001 D.发生溢出

[2015]下列有关浮点数加减运算的叙述中,正确的是__B__

I.对阶操作不会引起阶码上溢或下溢

II.右规和尾数舍入都可能引起阶码上溢

III.左规时可能引起阶码下溢

IV.尾数溢出时结果不一定溢出

A.仅II、III B.仅I、II、IV

C.仅I、III、IV D.I、II、III、IV

本章作业

1. 对于二进制数,若小数点左移一位,则数值 (),若小数点右移一位,则数值(C)

A. 扩大一倍,扩大一倍

B. 扩大一倍,缩小一半

C. 缩小一半,扩大一倍

D. 缩小一半,缩小一半

2. X 、 Y 为定点二进制数,其格式为 1 位符号位, n 位数值位。若采用 Booth 补码一位乘法实现乘法运算,则最多需要做(C)次加法运算

A. n-1

B. n

C. n+1

D. n+2

3. 下列说法中 是错误的(A)

A. 符号相同的两个数相减会产生溢出

B. 符号不同的两个数相加是不会产生溢出的

C. 逻辑运算是没有进位或借位的运算

D. 浮点加减运算需进行对阶操作

4. 负溢指的是(B)

A. 运算结果的绝对值小于机器所能表示的最小绝对值

B. 运算的结果小于机器所能表示的最小负数

C. 运算的结果小于机器所能表示的最小正数

D. 运算结果的最低有效位产生错误

5. 在串行进位的并行加法器中,影响加法器运算速度的关键因素是(C)

A. 门电路的级延迟

B. 元器件速度

C. 进位传递延迟

D. 各位加法器速度的不同

6. 并行加法器中每一位的进位产生函数Gi为(A)

A. Ai•Bi

B. Ai⊕Bi

C. Ai⊕Bi⊕Ci

D. Ai+Bi+Ci

7. 补码加减法是指(C)

A. 操作数用补码表示,两尾数相加减,符号位单独处理

B. 操作数用补码表示,符号位和尾数一起参加运算,结果的符号与加减数相同

C. 操作数用补码表示,连同符号位直接相加,减某数用加某数的机器负数代替,结果的符号在运算中形成

D. 操作数用补码表示,由数符决定两个尾数的操作,符号位单独处理。

8. 两个补码数相加,采用1位符号位,当(D)时,表示结果溢出

A. 符号位有进位

B. 符号位进位和最高数位进位异或结果为0

C. 符号位为1

D. 符号位进位和最高数位进位异或结果为1

9. 在双符号位判断溢出的方案中,出现正溢时,双符号位应当为(B)

A. 00

B. 01

C. 10

D. 11

10. 当定点运算发生溢出时,应进行(C)

A. 向左规格化

B. 向右规格化

C. 发出出错信息

D. 舍入处理

11. 8位补码10010011等值扩展为16位后,其机器数为(A)

A. 1111 1111 1001 0011

B. 0000 0000 1001 0011

C. 1000 0000 1001 0011

D. 1111 1111 0110 1101

12. 设机器数字长8位(含2位符号位), 若机器数DAH为补码, 则算术左移一位后是_______,算术右移一位后是_______(A)

A. B4H,EDH

B. F4H,6DH

C. B5H,EDH

D. B4H,6DH

13. 如果X为负数,则已知[X]补求[-X]补(D)

A. [X]补各值保持不变

B. [X]补符号位变反,其他各位不变

C. [X]补除符号位外,各位变反,末位加1

D. [X]补连同符号位一起各位变反,末位加1

14. 原码乘法时,符号位单独处理,乘积的符号是(C)

A. 两个操作数符号相“与”

B. 两个操作数符号相“或”

C. 两个操作数符号相“异或”

D. 两个操作数中绝对值较大数的符号

15. 在补码表示的机器数中,若寄存器A中原存的数为9EH,现存的数为CFH,则表明执行的一条指令是(C)

A. 算术左移

B. 逻辑左移

C. 算术右移

D. 逻辑右移

16. 两个浮点数相加,一个数的阶码值为7,另一个数的阶码值为9,则需要将阶码值较小的浮点数的小数点(C)

A. 左移1位

B. 右移1位

C. 左移2位

D. 右移2位

17. 在浮点加减中对阶是(A)

A. 将较小的一个阶码调整到与较大的一个阶码相同

B. 将较大的一个阶码调整到与较小的一个阶码相同

C. 将被加数的阶码调整到与加数阶码相同

D. 将加数的阶码调整到与被加数阶码相同

18. 在定点二进制运算中,减法运算一般通过(D)来实现的

A. 原码运算的二进制减法器

B. 补码运算的二进制减法器

C. 原码运算的二进制加法器

D. 补码运算的二进制加法器

19. 运算器由许多部件组成,核心部件是(A)

A. 算术逻辑运算单元

B. 多路开关

C. 数据总线

D. 累加寄存器

20. 判断加减法溢出时,可采用三种判断方式,如果符号位进位为C0,最高数值位的进位是C1,产生溢出的条件是(D)

Ⅰ. C0产生进位

Ⅱ. C1产生进位

Ⅲ. C0、C1都产生进位

Ⅳ. C0、C1都不产生进位

Ⅴ. C0产生进位, C1不产生进位

Ⅵ. C0不产生进位, C1产生进位

A.Ⅰ和Ⅱ

B.Ⅲ

C.Ⅳ

D.Ⅴ和 Ⅵ

21. 已知x=-0.01111,y=+0.11001,求[x]补=_1.10001_,[-x]补=_0.01111_,[y]补=_0.11001_,[-y]补=_1.00111_,x+y=_+0.01010_,x-y=_溢出_.

22. 向左规格化的规则为尾数_左移1位_,阶码_减1_

23. (计算题, 8.6分)

已知 x 和 y,用变形补码计算 x-y,同时指出结果是否溢出。

(1)x=11011, y=-11111

(2)x=10111, y=11011

(3)x=11011, y=-10011

解:[x-y]补=[x]补+[-y]补

(1) x=11011,y=-11111

[-y]补=0011111

[x-y]补=0011011+0011111=01,11010;

正溢出

(2) x=10111,y=11011

[-y]补=1100101

[x-y]补=00,10111+11,00101=11,11100;

没有溢出,x-y=-00100

(3) x=11011,y=-10011

[-y]补=0010011

[x-y]补=00,11011+00,10011=01,01110;

正溢出

24. (计算题, 8.6分)

已知 x 和 y,用变形补码计算 x+y,同时指出结果是否溢出。

(1)x=11011,y=00011

(2)x=11011,y=-10101

(3)x=-10110,y=-00001

解:[x+y]补=[x]补+[y]补

(1)x=11011,y=00011

[x+y]补=0011011+0000011=0011110;没有溢出,x+y=11110

(2)x=11011,y=-10101

[x+y]补=0011011+1101011=0000110; 没有溢出,x+y=00110

(3)x=-10110,y=-00001

[x+y]补=1101010+1111111=1101001;没有溢出,x+y=-10111

25. 用原码一位乘法完成X×Y;其中X=0.1101,Y= -0.1011

[X]=1.1101,[Y]=1.1011,

|X|=0.1101,|Y|=0.1011

|X×Y|=0.01100011,Xs⊕Ys=0

[X×Y]=0.10001111

X×Y=0.10001111

26. 设X=+11/16,Y=+3/16,用变形补码计算X+Y,X-Y

X=0.1011,Y=0.0011,[X]补=0.1011,[Y]补=0.0011

[X+Y]补=[X]补+[Y]补=00.1011+00.0011=00.1110

X+Y=0.1110

[-Y]补=1.1101

[X-Y]补=[X]补+[-Y]补=00.1011+11.1101=00.1000

X-Y=0.1000

27. 设X=0.10010,Y=-0.10101,用补码一位乘法求X*Y

[X]补=0.10010,[Y]补=1.01011,[-X]补=1.01110

部分积 乘数

00.00000 1.010110 Yn+1=0

+ 11.01110 YnYn+1=10,+[-X]补

11.01110


→11.10111 0.101011 右移一位

+ 00.00000 YnYn+1=11,+0


11.10111

→11.11011 1 010101 右移一位

+ 00.10010 YnYn+1=01,+[X]补


00.01101

→00.00110 1 101010 右移一位

+ 11.01110 YnYn+1=10,+[-X]补


00.01100

→00.00110 0 011010 右移一位

+ 11.01110 YnYn+1=10,+[-X]补


11.10100

[X*Y]补=11.10100 00110

X*Y=-0.01011 11010

28. 按照浮点数四则运算的方法,将以下x和y写成浮点数,并求x-y,其中

x=(-5/8)*2-5,y=(7/8)*2-4。(除阶符、数符外,阶码取3位,尾数取6位)

解:首先将十进制数转换成二进制数:x=(-0.101000)*2-101, y=(0.111000)*2-100

浮点数格式表示:[X]补=11,011;11.01100 [Y]补=11,100;00.111000(注意不是IEEE754格式,是一般格式)

①对阶:[Δj]补=11,011+00,100=11,111

阶差为-1,因此X的阶码+1,尾数右移一位

[X]补’=11,100;11.10110

②尾数求差

[Mx]补-[My]补=[Mx]补+[-My]补=11.101100+11.001000=110.110100

③规格化处理

因为两个符号为10,所以需右规1位:[x-y]补=11,101;11.011010(此时是整体右移,包括符号位,注意不要与补码右移的规则弄混了)

④舍入处理。右规低位丢 0,不需要处理。

⑤溢出判断。最后阶符为 11,没有溢出

∴[x-y]=-0.100110*2-011=(-19/32)*2-3

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值