我一直在阅读 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 放在末尾。
到目前为止一切顺利,在 number5 中,如果我们遵循相同的逻辑,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
或看到了我看不到的东西,并愿意分享他或她的知识和见解!