我一直在阅读 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/