有固定大小的位宽寄存器的偏移二进制算术有任何常规规则吗?

时间:2019-06-20 14:05:22

标签: math computer-science

假设我们有两个固定大小的二进制数(8位),例如 00000101 (5)00100000 (32)

任务是将它们添加为偏移二进制文件(超过128个)。关于如何执行此操作有任何具体规则吗?

例如,我会先将两个数字都转换为偏移量二进制表示法,然后将它们相加,然后减去偏移量(因为我将其相加了两次)吗?但是如果是这样的话,假想的寄存器只有8位宽,那么溢出怎么办?

还是我先减去多余的部分,然后加上第二个数字?偏移二进制算术有什么常规规则吗?

我正在为计算机体系结构和计算机数据算术考试做准备。这是上学期练习纸上的一项任务。我已经在网上广泛搜索了答案,但似乎找不到一个可靠的答案。

1 个答案:

答案 0 :(得分:0)

我不知道此操作的“常规规则”是什么,但是我可以告诉您在执行机器代码时如何执行此操作。

当偏移量是溢出寄存器的第一个数字的一​​半时,此方法效果很好。您的情况就是这样,因为偏移量为128,并且8位寄存器在256上溢出。当您要添加的两个数字已经采用偏移格式时,此方法特别有用。

方法是:将两个偏移号相加,作为无符号加法,并忽略任何溢出,然后翻转最高有效位。

在您的情况下,您要添加10000101(偏移量为5)和10100000(偏移量为32)。将这些结果添加到00100101中,因为最高有效位溢出了。翻转最高有效位将导致10100101,实际上是37的偏移格式。

此方法可能会导致溢出,但是仅当结果太正或太负而无法适合偏移格式时才如此。在大多数CPU中,这两个操作(无符号加法和翻转MSB)实际上是微不足道的。