如何操作LDA,STA,SUB,ADD,MUL和DIV在Knuth的机器语言MIX中工作?

Erw*_*ers 9 assembly knuth elixir-mix

我一直在阅读Donald Knuth第1卷的计算机程序设计艺术.现在我完成了第一部分,所有的数学都被解释了,这是非常愉快的.不幸的是,在p.他开始解释这种MIX基于真实机器语言的虚构机器语言,随后他将解释所有算法,而Knuth先生完全失去了我.

我希望这里有人"说话" MIX,可以帮助我理解它.具体来说,他失去了我开始解释不同操作和展示例子的地方(第125页).

Knuth使用以下形式的"指令格式":

图片1

他还解释了不同字节的含义:

图2

因此,右字节是要执行的操作(例如,LDA"加载寄存器A").F字节是操作代码的修改,具有8L + R的字段规范(L:R)(例如,C = 8且F = 11产生"加载具有(1:3)字段的寄存器).然后+/- AA是地址,我是修改地址的索引规范.

这对我来说有点道理.但是Knuth带来了一些例子.第一个我理解除了几个位,但我无法绕过第二个例子的最后三个,而在下面的例子3中的更困难的操作中没有任何东西.

这是第一个例子:

图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):

图4

同样,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.第三个例子,见

图5

第三个例子是我理解的最终目标,现在它完全没有任何意义.这是非常令人沮丧的,因为我想继续他的算法但如果我不明白MIX我将无法理解其余的!

我希望有人在这里有一个课程MIX或看到一些我看不到的东西,并愿意分享他或她的知识和见解!

Han*_*ant 5

该设计是 20 世纪 60 年代的产物,当时字节有 6 位,十进制计算很常见。机器必须与 10 位计算器竞争。必须强调的是,这是一个虚构的架构,实际实现它会很困难,因为字节没有固定的大小。MIX 可以以二进制方式工作,其中一个字节存储 6 位,您将获得相当于 31 位机器的效果:1 位用于符号,5 x 6 位用于字节,组成一个。或者可以以十进制形式工作,其中一个字节存储两个数字(0..99)。这不适合 6 位 (0..63),强调了设计的虚构部分。

它确实具有当时机器的另一个共同特征,即内存只能寻址。或者换句话说,您无法像在所有现代处理器上那样对单个字节进行寻址。因此需要一个技巧来从单词中提取字节值,这就是修饰符的作用(first:last)

从左到右,从 0 到 5 对单词的各个部分进行编号。0 是符号位,1 是 MSB(最高有效字节),5 是 LSB(最低有效字节)。最重要的细节是您必须移动字节,最后一个寻址字节(first:last)成为目标中的 LSB。

因此,要理解的简单内容是LDA 2000(0:5),复制所有内容LDA 2000(1:5),复制除符号位之外的所有内容,LDA 2000(3:5)复制 3 个字节,因为复制了 LSB,所以没有任何移位。只要last是 5 就不会发生什么特别的事情。

LDA 2000(0:0)也很容易理解,它只复制符号位,不复制任何字节。

LDA 2000(0:3)这就是麻烦开始的地方。一张图片可能会有所帮助:

+---+---+---+---+---+---+
| 0 | 1 | 2 | 3 | 4 | 5 |
+---+---+---+---+---+---+
  |
  v
+---+---+---+---+---+---+
| 0 | x | x | 1 | 2 | 3 |
+---+---+---+---+---+---+
Run Code Online (Sandbox Code Playgroud)

(0:3) 移动符号位和字节 #1 到 #3。请注意字节 #3 如何成为目标字中的最低有效字节。正是这种转变可能会引起混乱。

也许LDA 2000(4:4)现在也变得清楚了。仅复制一个字节,它成为目标中的 LSB。相同的配方LDA 2000(1:1),现在将字节 #1 移动到字节 #5。