我正在阅读 Knuth 的书 TAOCP。我只是在学习一个简单的寄存器数学运算。还有一个减法运算的例子:
rA before: - | 1234 | 0| 0| 9
Cell 1000: - | 2000 | 150| 0
SUB 1000
rA after: + | 766 | 149 | ?
我知道 -1234-(-2000) = 766 但是如何 (0 | 0) - 150 = 149 ??
为什么 9 - 0 = ?
这些是“打包”的词。也许我需要阅读更多关于它们的信息。或者谁能解释一下?
最佳答案
我相信逻辑是这样的:
- 这台 MIX 机器是十进制机器;每个字节包含两位十进制数字。
rA
包含值- 1234 00 00 09
。- 内存
M
包含值- 2000 0150 00
。 - 使用纯十进制算法从
rA
中减去M
得到 766,014,991,或+ 0766 0149 91
。
或者,
- 这个 MIX 机器是一个二进制机器;每个字节包含八个二进制位。
rA
包含值- 04D2 00 00 09
。M
包含值- 07D0 0096 00
。- 使用纯十六进制算法从
rA
中减去M
得到 0x2FE0095F7,或+ 02FE 0095 F7
,或十进制,+ 0766 0149 247
[原文如此].
因此,在不知道这台特定 MIX 机器的二进制/十进制的情况下,我们无法确定结果的低位字节是什么。保证是-9
的单字节表示,但是不知道这是91
十进制还是0xF7
二进制。
现在我面前没有 TAOCP 可供检查,但我相信这个逻辑很好地解释了让您感到困惑的 ?
。
关于assembly - MIX 减法如何处理 "packed"字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10065775/