计算机组成原理——运算器ALU,移位操作

一、组合逻辑电路和时序逻辑电路

组合逻辑电路:其输出仅取决于当前输入组合,不依赖先前输出,不具备存储状态的能力

时序逻辑电路:其输出不仅取决于当前输入,还取决于先前的输出,具备存储状态的能力。

ALU作为运算器的核心部件,只有运算当前输入的能力,并没有存储的能力,所以属于组合逻辑电路。

二、运算器的组成

运算器是由ALU(算术逻辑单元),AC(累加器),状态寄存器,通用寄存器(如ACC,MQ,X)组成。

ALU的功能包括算数运算(+-*/)和逻辑运算(或与非)。

三、移位操作和原码乘法

移位分为逻辑移位和算术移位。

逻辑运算针对无符号数,分为逻辑左移和逻辑右移。算术运算针对有符号数,分为算术左移和算术右移。

逻辑左移:低位补0,高位移出。

逻辑右移:高位补0,低位移出。

算术左移:低位补0,高位移出。

算术右移:高位补符号位,低位移出。

算数左移是进行乘法运算,左移一位是*2。

算数右移是进行除法运算,右移一位是/2。

原码乘法:符号位和数值位分开算。

例如原码01011*11001。其中01011是正数,11001是负数,乘出的结果一定是负数,所以符号位不用参与运算。只运算1011*1001,也就是两个原码的绝对值相乘,最后把运算结果(此时没有符号)补上符号位1.

四、溢出判断

左移时有可能发生溢出。

第一种判断溢出方法:

先看不溢出的情况,设0001(补码)左移一位变成0010(补码),发现数值从1变成了2。再如1111(补码)左移一位1110(补码),发现数值从-1变到-2。所以在不溢出时,左移一位数值会变成原来的两倍 。

再看溢出的情况,设1000(补码)左移一位变成(0000),发现数值从-8变成0,不是原来的两倍。再设1010(补码)左移一位变成0100(补码),从-6变成4,也不是原来的两倍。

总结:发生溢出就是左移一位后的值不是原来的两倍,或者说左移后符号位发生了变化时一定发生溢出。也可以看前两位,若相同,则不溢出;若不同,则溢出。

第二种判断溢出方法:单符号位法(+-)

第一种判断溢出方法是对移位操作,第二种判断溢出方法是对算术加法或算术减法(+-)。

例如:1001和1010进行相加。在计算1001+1010的时候看最高位的进位和第二位的进位,发现第一位进位为1,第二位的进位为0。

然后对这两位进行异或操作。异或:相同为0,不同为1。

1和0的异或是1,所以发生溢出。

最后计算出结果0011进行验证,发现两个负数相加得出正数,发生了溢出。

第三种判断溢出方法:双符号位法(算术加法或算术减法)

例如:1001和1010进行相加。相加前在最高位补个符号位,变成11001和11010.

然后进行11001+11010=10011,发现两个符号位一个为1,一个为0,所以发生溢出。

此处符号位为10,这是正溢出;而如果是01,则是负溢出。

第四种判断溢出方法:转真值,运算(+-*/都可算)

把两个补码转成原码,然后看结果是否超出范围。

例如:8位补码a=F5H,b=EEH,分别计算a+b,a-b,a*b,a/b,若将结果放在一个8位寄存器中,判断那种计算会发生溢出

答案:a*b

补码:a=1111 0101,b=1110 1110。

原码:a=1000 1011,b=1001 0010。

真值:a=-11,b=-18

运算:a+b=-29,a-b=9,a*b=198,a/b=11/18

因为结果放在一个8位寄存器中,计算机中8位寄存器可表示的范围是-128-127(补码范围)

发现a*b=198超出这个范围,8位计算机表示不出来,所以肯定会溢出。

五、加法器

加法器不分有符号数和无符号数。

加法和减法的控制靠Sub信号,Sub如果是0,为加法;如果是1,为减法。

对两个数进行加法或减法时,一个数x直接进入加法器,而对于另外一个数y,会进行判断。

在y进入加法器前有一个选择器,这个选择器如果收到Sub=0,那么y直接进入加法器;这个选择器如果收到Sub=1,那么y进入加法器前需要进行一次全部取反的操作。

Cin(低位进位信息)=Sub

六、例题

1.补码定点整数01010101,左移两位后的值是(    )

答案:01010100

解析:补码(有符号数),所以左移代表算数左移。算术左移:低位补0,高位移出。左移一位10101010,左移两位,01010100。

2.下列4个补码整数算数左移不会溢出的是()

A.80H   

B.90H

C.B0H

D.C0H

答案:D

解析:首先写出ABCD的二进制数:

A.1000 0000

B.1001 0000

C.1011 0000

D.1100 0000

再写成算数左移一位的值:

A.0000 0000

B.0010 0000

C.0110 0000

D.1000 0000

根据溢出总结,左移后符号位改变的一定溢出,可知A,B,C一定溢出,所以选D。

D.1100 0000是-64,移位后1000 0000是-128 ,刚好是原来的两倍,所以不发生溢出。

3.补码定点整数1001 0101右移一位的值是( )

答案:1100 1010

解析:补码(有符号数)右移一位,高位补符号位,低位移出。1001 0101是一个负数,所以右移补1,右移一位变成1100 1010

4.用双符号位,两个正数相加会产生溢出,那么双符号位是()

A.00

B.01

C.10

D.11

答案:B

解析:两个正数相加且产生溢出,那么一定是正溢出,正溢出的符号位是01.

5.补码x0x1x2x3...xm,x0为符号位,x1为最高位数,若()当补码左移,会发生溢出

A.x0=x1

B.x0不等于x1

C.x1=0

D.x1=1

答案:B

解析:第四部分中第一种判断方法。

6.计算机字长为8位,CPU中有一个8位加法器,已知无符号数x=69,y=38,若在加法器中计算x-y,则加法器的两个输入端信息和输入的低位进位信息分别是()

A.0100 0101,0010 0110,0

B.0100 0101,1101 1001,1

C.0100 0101,1101 1010,0

D.0100 0101,1101 1010,1

答案:B

解析:x=69(10)=0100 0101(2);y=38(10)=0010 0110(2)

因为计算x-y,所以sub=1,x直接进入加法器,y需要全部取反为1101 1001

两个输入端信息:0100 0101(x)和1101 1001(-y)。低位进位信息:Cin=Sub=1.

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值