计算机组成与设计(三)算术运算

一、加法和减法
加法即数据从右到左逐位相加,同时进位也相应地向左传播
减法可采用加法实现:减数在简单的取反后再加1形成补码再进行加法操作
在这里插入图片描述
在这里插入图片描述
而当运算结果超过限制时,就会发生溢出。
当相加的两个源操作数符号相异时,不会发生溢出;而当相减的符号相同时,不会发生溢出。(溢出发生时,符号位被数值位占用而产生错误;当两个正数相加但结果为负时,则说明发生溢出;或者做减法时,一个正数减去一个负数得到一个负的结果等1,则也说明发生溢出)
在这里插入图片描述
由于无符号数通常用于表示内存地址,这种情况下的溢出可以忽略

  • 加法(add)、立即数加法(addi)和减法(sub),这三条指令在溢出时产生异常
  • 无符号加法(addu)、立即数无符号加法(addiu)和无符号减法(subu),这三条指令在发生溢出时不会产生异常

二、乘法与除法
在这里插入图片描述
在这里插入图片描述
这个算法大概需要100个时钟周期来完成两个32位的数相乘(Amdahl定律:如果一个慢速操作在程序中占据一定比重的话,也会限制程序的性能)

可以改进成每一步只需要一个时钟周期,可以并行化来加速执行:当乘数位为1时,将乘数和被乘数进行移位,同时将被乘数和积相加
在这里插入图片描述
在这里插入图片描述
有符号乘法:最简单首先将被乘数和乘数转化为正数,并记住原来的符号位,这样可用上述算法迭代31次,符号位不必参加运算,当符号相异时,积为负;

更快速的乘法:将每个右边的加法器的输出作为左边加法器的输入,形成一个高32的加法器栈(将32个加法器组成一个并行树,只需等待log2(32),即5次32位长加法的时间)
在这里插入图片描述
除法:(被除数=商x除数+余数)
在开始时,32位的商寄存器设为0,算法每次迭代将除数向右移一位,所以需要在开始时将除数放置在64位除数寄存器的左半边,然后每右移一位来和被除数对齐,余数寄存器初始化为被除数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
改进的方法:通过将源操作数和商移位与减法同时进行
在这里插入图片描述
有符号除法:最简单的办法记住除数和被除数的符号,如果两者符号相异,则商为负

更快速的除法:由于除法算法每次迭代前需要知道减法结果的符号,而乘法可以立即生成32个部分积;(有些技术可以每步生产不止一个商位,如SRT除法算法,通过查找表的方式来尝试猜测每步几个商位,其中查找表基于被除数和余数的高位部分来进行,依赖后面的步骤来修正错误的猜测)

所以MIPS中的乘除法只需要一个64位的可左右移位的寄存器和一个能做加减法的32位宽的ALU(MIPS用32位的Hi和32位的Lo寄存器来处理,Hi存放余数,Lo存放商)
在这里插入图片描述
在这里插入图片描述
三、浮点运算
规格化数:一个采用科学计数法表示的数,没有前导零且小数点左边只有一位整数(为了使二进制数规格化,需要定义一个基数,这个基数可用来移位使小数点左边只保留一位非零数,只有基数为2才满足)

  • 简化浮点数的数据交换
  • 简化了浮点算术算法
  • 提高了用一个字存储的数的精度

浮点设计者必须在尾数和指数位宽之间找到折中的方法(增加小数部分可以增加表示精度,增加指数部分会增加数的表示范围)
在这里插入图片描述
在这里插入图片描述
浮点数表示范围(2.0 x10-38 到2.0 x 1038 )

上溢:表示指数太大而不能在指数域表示
下溢:负的指数太大(即数太小)而导致指数域放不下的情况
一种减少上溢和下溢的方法是采用更大指数的格式,double->双精度浮点算法
在这里插入图片描述
在这里插入图片描述
IEEE754给出一种表示无效操作结果(如0/0或者无穷-无穷)的符号(NaN,Not a number),设立NaN的目的是让程序员推迟程序中的一些测试和决定,等到方便的时候进行。

带偏阶的记数法:(希望将最小的负指数表示为00000000,而最大的正指数表示为11111111,需要从带偏阶的指数中减去偏阶,才能够获得真实的值)
IEEE754规定单精度偏阶为127,所以指数为-1,则会表示为-1+127,即126=0111 1110,而+1表示为1+127,即128=1000 0000;双精度的偏阶为1023
在这里插入图片描述
浮点加法
1、为了能让两数相加,必须将有较小指数的数向有较大指数的数对齐
2、将有效数相加
3、由于和不是规格化的科学记数法,需要调整
在这里插入图片描述
在这里插入图片描述
浮点乘法:
1、只要简单地将源操作数的指数相加来作为积的指数
2、计算有效数的乘法
3、将得到的积规格化
4、根据有效数进行舍入操作
5、积的符号取决于原始源操作数的符号
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
算术的精确性:
由于实数有无穷多个,而双精度最多可以精确表示256 个,IEEE754提供了几个舍入模式供程序员选择
保护位:在浮点数中间计算中,在右边多保留的两位中的首位;用于提高舍入精度
舍入位:在浮点数中间计算中,在右边多保留的两位中的第二位,使浮点中间结果满足浮点格式,得到最接近的数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
IEEE754有四种舍入模式:
1、总是向上舍入(向正无穷)
2、总是向下舍入(向负无穷)
3、截断舍入
4、想最靠近的偶数舍入(如果最后一位是奇数,就加1;如果是偶数,就减1)

粘贴位:当舍入位右边有非0的数据时将其置1
在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章