【计算机组成原理】定点数运算

定点数加减运算

补码加法:

负数用补码表示后,可以和正数一样去处理

当需要减去一个数x的时候,可以用加上x对应的负数的补码【-x】补来代替

【x】补+【y】补=【x+y】补

补码减法

【x-y】补=【x】补+【-y】补(mod 2)

【x-y】补=【x】补+【-y】补 (mod 2的n+1次方)

补码基本规则:

  • 运算的各个操作数均用补码表示,运算结果仍是补码
  • 符号位和数值位一样参加运算
  • 如果求和,则将两补码直接相加,得到两数之和的补码,若求差,则将减数变补(【y】补变【-y】补),然后和被减数相加,得到两数之差的补码
  • 如果超过则模丢掉

溢出:

两个正数相加结果变为负数   溢出

两个负数相加结果变为正数   溢出

双符号位也叫变形补码(00表示正  11表示负)  符号位参加运算如果结果出现 01 或10 则发生溢出

单符号位:最高数值位产生进位符号位五金位产生上溢     最高有效位无进位符号位有进位产生下一,也就是当都有进位或都没有进位时不产生溢出,用异或们表示。

定点乘法:

原码一位乘法:数值位相乘  符号位单独处理

乘积的位数扩大一倍(两个4位相乘变成8位)

改进乘法:

定点除法

原码除法运算原理

两个原码表示的数相除,商的符号由两数的符号按位相加求得,商的部分由两数的数值部分相除求得。

被除数x原码为【x】原=XfXn-1.....X1X0

除数y原码【y】原=YfYn-1....y1y0

则有商q=x/y其原码为

【q】原=(Xf异或Yf)+(0.Xn-1...X1X0/0.Yn-1...Y1Y0)

恢复余数法:

机器必须现做减法,若余数为正才知道够减,若余数为负,才知道不够减。不够减是必须回复原来的余数,以便在继续往下,这种称为恢复余数法。

不恢复余数法:

但由于要恢复余数,使除法进行过程的步数不固定,因此控制比较复杂

实际中常用不恢复余数法,又称加减交替法,重点是运算过程中如出现不够减则不必恢复余数,根据余数符号,可以继续往下运算,因此步数固定,控制简单。

真题

1、假定在一个8位字长的计算机中进行如下类C程序

1 unsigned  int x=134;
2 unsigned int y=246;
3 int m=x;int n=y;
4 unsigned int z1=x-y;
5 unsigned int z2=x+y;
6 int k1=m-n;
7 int k2=m+n;

若编译的时候将8个8位寄存器R1~R8分别分配给x y m n z1 z2 k1 k2请回答下列问题(带符号整数用补码表示)

1)执行上述程序段后,寄存器R1 R5 R6和分别是什么,十六进制表示

2)执行后,变量m和k1的值分别是多少(十进制)

3)上述程序段设计带符号的整数加减  ,无符号整数的加减运算 四种运算能否利用同一个加法器及辅助电路实现?

4)计算机内部如果判断带符号的整数加减运算的结果是否溢出,上述程序段中,那些带符号整数运算语句的执行结果会溢出

R1   R2 R3 R4 R5 R6 R7 R8
X Y m n z1 z2 k1 k2
无符号 无符号            

答:1)x=134=1000 0110=86H   Y=246=1111 0110=F6H

R5=x-y=134-246=-112->1111 0000->1 001 0000(补)=90H

R6:z2=134+246=380=1 0111 1100=7CH(高位丢弃了)

2)m补=x=1000 0110->m=1111 1010 =-122

n补=y=1111 0110->n=1000 1010 =-10

k1=m-n=-122-(-10)=-112

3)能  无符号数有符号数都是二进制代码,有符号数的符号位代码化了,和数值位一样参加运算,减一个数等于加上整数对应的负数的补码

4)双符号位   单符号位等

2、

浮点数的表示方法

  31 23-30 0-22
32位 S符号位 E移码表示   127  M尾数
  63 52-62 0-51
64位 S符号位 E移码表示  1023 M尾数

32位浮点数中,将浮点数的指数真值e变为阶码,应将指数e加上一个固定的偏移量127(01111111) E=e+127 .因为阶码是用移码表的

规格化:当尾数的值不为0时,尾数域的最高位应为1,否则修改阶码同事左右移小数点的办法,使其变成这一表示方式,这称为浮点数的规格化表示。因为尾数的最高位总为1,所以这一位不需要存储而是默认存在、

当阶码E全0(00000000)且尾数M也全为0时,表示的真值x为0,结合符号位s为0或1,有正零和负零之分

当阶码全是1(11111111)且尾数M为全0,表示的浮点数位无穷大,结合符号位S为0或1,也有正无穷大和负无穷大之分、

32位浮点数表示除去全0和全1阶码范围为00000001 到1111 1110   也就是1到254

规格化浮点数指数e则为-126(1-127)到127(154-127)

浮点数的加减运算

因为右移丢失的误差小,所以采用尾数右移,对阶的原则是小阶向大阶对齐,尾数右移1位阶码+1.

浮点数的溢出:

上溢发生中断  下溢不发生中断

例题:

D

原文地址:https://www.cnblogs.com/dream-to-pku/p/11616084.html