手工进行二进制2的补码乘法吗? [英] Binary 2's complement multiplication by hand?

查看:4
本文介绍了手工进行二进制2的补码乘法吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须手动计算MIPS乘法,我遇到了麻烦。

我有两个寄存器,$8,它保存的二进制补码表示为-1073741824(即2^30)和$9,其中二进制补码为+3,我需要找到这条mips指令的结果

mult $8, $9

我完全迷路了。是否需要先将值转换为二的补码,然后再使用二进制乘法?

推荐答案

MULT指令是两个32位寄存器的带符号乘法。它将结果存储在特殊的(Hi,Lo)寄存器中,该寄存器组合在一起可以得到64位的结果。其原因是,当您将两个32位值相乘时,结果可能太大,无法放入单个32位寄存器。

如果练习的目标是手动处理1和0,并自己做乘法,那么是的,你可以做到。然而,您很可能会在某个位数如此之多的地方出现。

让我们先看看我们是否可以使用一些推论来了解结果应该是什么样子: 在二的补码中,最有效的数字是符号:

  • 0表示+
  • 1表示-

查看运算,您马上就知道结果的最高有效位将是1。这意味着Hi寄存器的最高位将是1。

这就是说,现在让我们看看我们正在相乘的值(我现在省略了符号,我们将回到那个位置):

X 3=230x(21+20)
     = 2^31 + 2^30

我们现在已经把乘法变成了更容易做的加法。在这种情况下,此值的二进制表示在第32位和第31位为1,或:

1100 0000 0000 0000 0000 0000 0000 0000

现在我们需要获取此值并将其转换回负数表示形式,但现在通过64位寄存器:因此64位正值如下所示:

0000 0000 0000 0000 0000 0000 0000 0000 1100 0000 0000 0000 0000 0000 0000 0000

二进制补码的工作原理是从具有相同位数(全为1)的最大正数中减去正数,然后将结果加一:

较小规模的示例:

        3 = 0011
       -3 = 1111 - 0011 + 0001 
making -3 = 1101

现在让我们将其应用于64位值,首先从最大64位int值中减去正结果:

 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111
-0000 0000 0000 0000 0000 0000 0000 0000 1100 0000 0000 0000 0000 0000 0000 0000
=1111 1111 1111 1111 1111 1111 1111 1111 0011 1111 1111 1111 1111 1111 1111 1111

该值加1等于:

1111 1111 1111 1111 1111 1111 1111 1111 0100 0000 0000 0000 0000 0000 0000 0000

因此,操作后的寄存器将为:

Hi = 1111 1111 1111 1111 1111 1111 1111 1111 
Lo = 0100 0000 0000 0000 0000 0000 0000 0000

这篇关于手工进行二进制2的补码乘法吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆