【发布时间】:2014-01-04 17:29:56
【问题描述】:
我一直在阅读 Donald Knuth 的《计算机编程艺术》第 1 卷。现在我读完了所有数学解释的第一部分,非常愉快。不幸的是,在第。 121 他开始根据真实机器语言解释这种名为MIX 的虚构机器语言,随后他将解释所有算法,Knuth 先生完全迷失了我。
我希望这里有人“说”一点MIX 并能帮助我理解它。具体来说,他在开始解释不同的操作并展示示例(从第 125 页开始)时迷失了我。
Knuth 使用这种“指令格式”,形式如下:
他还解释了不同字节的含义:
所以正确的字节是要执行的操作(例如,LDA“加载寄存器 A”)。 F 字节是对带有字段规范 (L:R) 的操作码的修改,带有 8L + R(例如,C=8 和 F=11 产生“使用 (1:3) 字段加载 A 寄存器)。然后 +/- AA 是地址,I 是修改地址的索引规范。
嗯,这对我来说有点道理。但随后 Knuth 举了一些例子。第一个我确实理解,除了几位,但我无法理解第二个示例的最后三个,下面的示例 3 中更困难的操作完全没有。
这是第一个例子:
LDA 2000 只是加载完整的单词,我们可以在寄存器 A rA 中看到它。第二个 LDA 2000(1:5) 加载从第二位(索引 1 )到末尾(索引 5)的所有内容,这就是加载除加号之外的所有内容的原因。第三个带有LDA 2000(3:5) 的只是加载从第三个字节到最后一个字节的所有内容。 LDA 2000(0:3)(第四个例子)也是有道理的。应该复制 -803 并取 - 并将 80 和 3 放在末尾。
到目前为止一切顺利,在数字 5 中,如果我们遵循相同的逻辑,LDA2000(4:4) 它只传输第四个字节。它确实做到了最后一个位置。但是,在LDA 2000(1:1) 中,只应复制第一个字节(符号)。这很奇怪。为什么第一个值是 + 而不是 - (我希望只复制 - )。为什么其他值都是0,最后一个问号?
然后他给出了第二个例子,操作STA(商店A):
同样,STA 2000、STA 2000(1:5) 和 STA 2000(5:5) 具有相同的逻辑。然而,然后 Knuth 做了STA 2000(2:2)。您可能希望在寄存器 A 中复制等于 7 的第二个字节。但是不知何故,我们最终得到了- 1 0 3 4 5。我已经看了好几个小时了,不知道这个,或者这个后面的两个例子(STA 2000(2:3) 和 STA 2000(0:1))如何导致显示的位置内容。
我希望这里有人能对这最后三个人大开眼界。
此外,我在他解释操作ADD、SUB、MUL 和DIV 的页面上也遇到了很大问题。第三个例子,见
这第三个示例是我要理解的最终目标,现在它完全零意义。这非常令人沮丧,因为我确实想继续使用他的算法,但如果我不理解MIX,我将无法理解其余的!
我希望这里有人上过MIX 的课程,或者看到了我看不到的东西并愿意分享他或她的知识和见解!
【问题讨论】:
-
感谢我已阅读该页面,但遗憾的是它没有对语言操作本身进行解释。我找到了一个在线 MIX 模拟器here。
-
我在 1969 年从 Knuth 的第 1 卷中学习了数据结构,但从未了解 MIX 汇编代码;他确实提供了独立于 MIX 的代码。恕我直言,它并没有对我造成明显的伤害,并且已经为我服务了 40 多年(我已经使用他描述的算法进行了很多汇编编码)。我希望你得到一个好的答案,但你不需要它来欣赏他的表达的美丽和直觉。