Erw*_*ers 9 assembly knuth elixir-mix
我一直在阅读Donald Knuth第1卷的计算机程序设计艺术.现在我完成了第一部分,所有的数学都被解释了,这是非常愉快的.不幸的是,在p.他开始解释这种MIX
基于真实机器语言的虚构机器语言,随后他将解释所有算法,而Knuth先生完全失去了我.
我希望这里有人"说话" MIX
,可以帮助我理解它.具体来说,他失去了我开始解释不同操作和展示例子的地方(第125页).
Knuth使用以下形式的"指令格式":
他还解释了不同字节的含义:
因此,右字节是要执行的操作(例如,LDA
"加载寄存器A").F字节是操作代码的修改,具有8L + R的字段规范(L:R)(例如,C = 8且F = 11产生"加载具有(1:3)字段的寄存器).然后+/- AA是地址,我是修改地址的索引规范.
这对我来说有点道理.但是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
或看到一些我看不到的东西,并愿意分享他或她的知识和见解!
该设计是 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。
归档时间: |
|
查看次数: |
8023 次 |
最近记录: |