码迷,mamicode.com
首页 > 其他好文 > 详细

使用加法器实现减法

时间:2017-09-12 15:48:35      阅读:523      评论:0      收藏:0      [点我收藏+]

标签:定义   运算   原理   操作   溢出   执行   自己动手写cpu   nbsp   有符号   

《自己动手写CPU》一书中,MIPS32的减法指令SUB和SUBU与加法指令一起实现。

书中的方法是(示例代码,不严谨):

reg2_mux = (是减法指令)  ?  ( ~reg2 + 1 ) : reg2 ;

result = reg1 + reg2_mux ;

对这个处理方法,书中将 ~reg2+1 称为 reg2 的补码。

 

补码的定义中,最高位是符号位,且原码转补码的过程中符号位不需要取反,而且有符号正整数的补码就是原码。

所以这里直接将 ~reg2+1 称为 reg2 的补码并不准确。

 

这里使用加法器实现减法的原理如下:

假设有n位寄存器A、B保存了无符号数a、b。需要执行 a-b 计算。

那么 a-b 可以看做 a+(-b)。

B寄存器保存的了b,那么对B寄存器取反得到的值是 2n-1-b,也就是 ~B = 2n-1-b,也就有 -b = ~B+1-2n

因此 a+(-b) 可以由寄存器A、B执行 A+(~B)+1-2n得到。这里-2n明显超出A、B的取值范围,对加法器的运算结果没有影响(对加法器溢出标志位有影响,这里不再讨论)。

因此可以将 a-b 的运算,通过 A+(~B)+1的方法实现。也就是通过加法器实现了减法,而这个操作本身只是看上去与补码类似,并不能说成是补码。

 

使用加法器实现减法

标签:定义   运算   原理   操作   溢出   执行   自己动手写cpu   nbsp   有符号   

原文地址:http://www.cnblogs.com/mcdeggy/p/7509887.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!