假设我们有两个固定大小的二进制数(8位),例如
00000101 (5)
和00100000 (32)
任务是将它们添加为偏移二进制文件(超过128个)。关于如何执行此操作有任何具体规则吗?
例如,我会先将两个数字都转换为偏移量二进制表示法,然后将它们相加,然后减去偏移量(因为我将其相加了两次)吗?但是如果是这样的话,假想的寄存器只有8位宽,那么溢出怎么办?
还是我先减去多余的部分,然后加上第二个数字?偏移二进制算术有什么常规规则吗?
我正在为计算机体系结构和计算机数据算术考试做准备。这是上学期练习纸上的一项任务。我已经在网上广泛搜索了答案,但似乎找不到一个可靠的答案。
答案 0 :(得分:0)
我不知道此操作的“常规规则”是什么,但是我可以告诉您在执行机器代码时如何执行此操作。
当偏移量是溢出寄存器的第一个数字的一半时,此方法效果很好。您的情况就是这样,因为偏移量为128
,并且8位寄存器在256
上溢出。当您要添加的两个数字已经采用偏移格式时,此方法特别有用。
方法是:将两个偏移号相加,作为无符号加法,并忽略任何溢出,然后翻转最高有效位。
在您的情况下,您要添加10000101
(偏移量为5
)和10100000
(偏移量为32
)。将这些结果添加到00100101
中,因为最高有效位溢出了。翻转最高有效位将导致10100101
,实际上是37
的偏移格式。
此方法可能会导致溢出,但是仅当结果太正或太负而无法适合偏移格式时才如此。在大多数CPU中,这两个操作(无符号加法和翻转MSB)实际上是微不足道的。