gpt4 book ai didi

手动二进制 2 的补码乘法?

转载 作者:行者123 更新时间:2023-12-02 06:22:53 28 4
gpt4 key购买 nike

我必须手动解决 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。

这就是说现在让我们看看我们乘以的值(我现在省略了符号,我们会回到那个):

230 x 3 = 230 x (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

对该值加一可以:

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 的补码乘法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6317932/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com