我一直在阅读 Donald Knuth 的 The Art of Programming, Volume 1,其中使用 MIX 作为汇编语言。在 Knuth 谈到 MIX 中的算术运算的部分中,我没有理解减法、乘法和除法运算是如何进行的。

例如,课本上有这样的:



这本书说执行 A-M 结果是: +| 766 | 149|?

在 MIX 中,内存被拆分为单词。每个单词都有以下内容:
第一个字段表示符号(+ 或 -)
接下来的两个字节保存地址。
下一个字节表示索引,而第五个字节用于字段说明。
最后一个字节用于操作码。
这本书说执行 A-M 结果是: +| 766 | 149|?

谁能帮我这个?

最佳答案

正在执行减法运算,因此直觉上会认为答案应该是这样的:

rA  - | 1234 | 0 | 0 | 9  | (before)
SUB - | 2000 |  150  | 0  |
---------------------------
      | +766 |  +150 | -9 | (after)

这是错误的,因为即使您知道 (3:4) 是 150,也无法确定 (3:3) 和 (4:4) 的各个值。此外,字节的符号不一致。如果您考虑每字节 5 位的情况,则机器将此结果中的最低有效字节视为:

[ 321 x (150) ] - 9 = [ 321 x (149) ] + [ 320 x (23) ]

每字节 6 位的机器会将其解释为:

[ 641 x (150) ] - 9 = [ 641 x (149) ] + [ 640 x (55) ]

再进一步,每字节 7 位的机器会将其解释为:

[ 1281 x (150) ] - 9 = [ 1281 x (149) ] + [ 1280 x (119) ]

因此,您可以从这些示例中看到,对于任何字节大小都存在 149,但最低有效字节因机器而异。因此,正确答案是
rA  - | 1234 | 0 | 0 | 9 | (before)
SUB - | 2000 |  150  | 0 |
--------------------------
rA  + |  766 |  149  | ? | (after)

关于assembly - 唐纳德·克努斯 (Donald knuth) 的 Mix 汇编语言中的算术运算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25874604/

10-11 22:37