1、
- 基本运算部件:加法器、ALU、移位器(ALU的核心部件是加法器)
- 基本逻辑运算和定点数加减运算: 由算术逻辑部件ALU实现;
- 乘除运算和浮点数运算:加法器/ALU和移位器
![第二章 运算方法和运算部件 第二章 运算方法和运算部件](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzM5NS9mMzc4NzZkY2M1YjAyZGYwNzllMGU1N2JmOWYyY2Y4My5wbmc%3D.png?w=700&webp=1)
- 零标志ZF=1表示F结果为0(无符号和带符号整数)
- 溢出标志OF=1表示带符号整数运算时结果发生了溢出(对无符号运算无意义)
- 符号标志SF表示结果的符号,即F的最高位。(对无符号数运算无意义)
- 进/借位标志CF表示无符号数加/减运算时的进位/借位。加法时,CF等于进位输出Cout,减法时,就应将进位输出 Cout取反来作为标志位。综合起来,CF=Sub+Cout.
- [A+B]补 = [A]补 + [B] 补 ( MOD 2n )
[A–B]补 = [A]补 + [–B] 补 ( MOD 2n ) - 加、减法运算统一采用加法来处理
- 符号位(最高有效位MSB)和数值位一起参与运算
- 直接用Adder实现两个数的加运算(模运算系统),Adder中执行的运算相当于无符号数加。
(2) 和的符号位和加数的符号位不同
- 对阶
- 尾数加减
- 尾数规格化
- 尾数的舍入处理
- 溢出判断
循环移位:数据本身形成闭合环路
算术移位:带符号的数移位,符号不变、数量变化(考虑正负号
1)算术移位 当乘数或除数是2n时,算术移位用来快速地完成对整数进行乘法或除法的运算。算数左移n位相当于乘上2n,执行方法是把原来的数中每一位都向左移动n个位置,左面移出的高位丢弃不要,右面低位空出的位置上全部补0。
-
如果是无符号数,不管是左移还是右移都是“逻辑移位”
移位对象:一组无数值意义的二进制代码
仅仅数码位置变化,数值大小无变化
- 不管左移右移,移出来的空位补0即可。
- 如果是有符号数,则做左移运算,即做的是“逻辑移位”,同①中无符号数的左移。而做右移运算,那么做的是“算术移位”。
-
前提:移位后,符号为保持不变
(1)原码移位规则
不论正数还是负数,原码移位规则相同
左移:符号位不变—依次左移,末位补0;
右移:符号位不变—依次右移,最高有效位补0
注意:若左移前最高有效位已经为1,将溢出!
符号位保持不变,左边补1
例:X补=11010010
右移:X补=11101001
规则:各位依次左移,最高有效位左移至符号位,末位补0
例: X补= 11010010
左移:X补= 10100100
注:若符号位和最高位不相等时发生溢出。
B.x0≠x1
C.x1=O
D.x1=1
如果8位二进制补码的最高位(符号位)为1,那么扩展后的16位补码直接在最高位前面添加8个1即可;
举例如下:
-13
8位原码:1000 1101
8位补码:1111 0011
16位原码:1000 0000 0000 1101
16位补码:1111 1111 1111 0011
根据前面的知识,由于-13的最高位为1,所以直接在最高位前面添加8个1即可变为16位补码,即1111 1111 1111 0011(与前面由原码求补码的结果一致)。
13
8位原码:0000 1101
8位补码:0000 1101
16位原码:0000 0000 0000 1101
16位补码:0000 0000 0000 1101
根据前面的知识,由于13的最高位为0,所以直接在最高位前面添加8个0即可变为16位补码,即0000 0000 0000 1101(与前面由原码求补码的结果一致)。
题目二:8位补码定点整数10010101扩展8位后的值用十六进制表示为:FF95H
定点小数和定点整数,除了表达的数值外,在运算上会有什么区别呢?
先是位扩展。当8位扩至16位时,如果是定点整数,则在该数前补8个符号位。而如果是定点小数,则在该数后补8个0。再是16位到8位,定点整数则是丢弃高8BIT,定点小数则是丢弃低8BIT。因此,定点整数将会发生严重的溢出,而定点小数只会丢失部分精度。
在计算加减的时候,定点小数与定点整数没有太大的区别。在乘法上,就有一些区别了。比如说00000001 x 00000001。在定点整数的时候,由于1x1=1,因此结果为00000000 00000001。但是在定点小数时,由于00000001不再表示1,而是2^-7,因此,相乘的结果为 00000000 00000010,即2^-14。
也可以这么理解。由于定点小数的权重是由左向右的,由于两个带符号位的定点小数相乘,使得前面多出了一个符号位,因此需要左移一位来移出这个符号位。这样,从编码的字面值来看,定点小数相乘的结果是定点整数相乘结果的两倍。
那么定点小数究竟有什么好处呢?Hanny是这么理解的。在做乘法或乘加运算时,定点整数需要不断地移位来防止溢出,而定点小数则可直接实现。因为是小于1,所以定点小数在乘法运算过程永远不会溢出。