9

Donald Knuth の Art of Computer Programming の第 1 巻を読んでいます。今、すべての数学が説明されている最初の部分を読み終えました。とても楽しかったです。残念ながら、p。MIX121彼は、実際の機械語に基づいて呼び出されたこの架空の機械語の説明を開始し、その後、すべてのアルゴリズムを説明します.クヌース氏は私を完全に失いました.

MIXここに誰かが「話し」、それを理解するのを手伝ってくれることを願っています. 具体的には、彼はさまざまな操作を説明し、例を示し始めたところで私を失いました (p. 125 以降)。

Knuth は、こ​​の「命令形式」を次の形式で使用します。

写真1

彼はまた、異なるバイトが何を意味するのかを説明しています:

写真2

したがって、右側のバイトは実行される操作です (たとえば、LDA「レジスタ A のロード」)。F バイトは、8L + R を使用したフィールド指定 (L:R) を持つ操作コードの変更です (たとえば、C=8 および F=11 は、「(1:3) フィールドでレジスタをロードします)。その後、+/- AA はアドレスで、I はアドレスを変更するためのインデックス指定です。

まあ、これは私にとってある種の意味があります。しかし、Knuth はいくつかの例を示しています。最初の例はいくつかのビットを除いて理解できますが、2 番目の例の最後の 3 つについて頭を悩ませることはできず、以下の例 3 のより難しい操作からは何もわかりません。

最初の例を次に示します。

写真3

LDA 2000完全な単語をロードするだけで、レジスタ A に完全に表示されrAます。2 番目のLDA 2000(1:5)ものは、2 番目のビット (インデックス 1 ) から最後 (インデックス 5) までのすべてをロードします。これが、プラス記号を除くすべてがロードされる理由です。3 つ目はLDA 2000(3:5)、3 番目のバイトから最後のバイトまですべてをロードするだけです。またLDA 2000(0:3)、(4番目の例)意味があります。-803 をコピーして - を取り、80 と 3 を最後に配置します。

これまでのところ、番号 5 では、同じロジックに従うとLDA2000(4:4)、4 番目のバイトのみが転送されます。それは確かに最後の位置にしました。ただしLDA 2000(1:1)、最初のバイト (符号) のみをコピーする必要があります。これは奇妙です。最初の値が - ではなく + なのはなぜですか (私は - だけがコピーされると思っていました)。他の値がすべて 0 で、最後の値が疑問符なのはなぜですか?

次に、彼は操作STA(ストア A)で 2 番目の例を示します。

写真4

繰り返しますがSTA 2000STA 2000(1:5)STA 2000(5:5)は同じロジックで意味をなします。ただし、Knuth はSTA 2000(2:2). レジスタ A の 7 に相当する 2 番目のバイトがコピーされることを期待するでしょう- 1 0 3 4 5。私はこれらを何時間も見てきましたが、これがどのようにして、またはこの 1 つに続く 2 つの例 (STA 2000(2:3)およびSTA 2000(0:1)) が表示されている場所の内容になるのかわかりません。

ここにいる誰かが、これらの最後の 3 つに光を当ててくれることを願っています。

ADDさらに、 、 、 、 、SUBMUL、の操作を説明するページにも大きな問題がありますDIV。3 番目の例を参照してください。

写真5

この 3 番目の例は、理解するための私の最終的な目標であり、現時点ではまったく意味がありません。彼のアルゴリズムを引き続き使用したいので、これは非常にイライラしますが、理解できなければMIX残りの部分を理解することはできません!

ここにいる誰かがMIX、私が見ていない何かについてのコースを受講したり、見たりして、彼または彼女の知識と洞察を喜んで共有してくれることを願っています!

4

3 に答える 3

2

Knuth の MIX コンピュータのストア操作を意味のあるものにする別の方法を次に示します。STA 2000(a:b)フィールド仕様のようなストア操作(a:b)では、レジスタ内のバイトを参照するのではなく、メモリ位置内のバイトを参照します。2000 年から2000rA年までのメモリ位置 2000 にデータを格納するように指示されています。次に、必要なバイトのみをから2000 に格納します。abrA

したがって、次のようなメモリ位置 2000 があるとします。

- 1 2 3 4 5

次のようになりrAます。

+ 6 7 8 9 0

そしてSTA 2000(2:2)、結果を実行します

- 1 0 3 4 5

2 で 2 で終わるバイトは、メモリ内rAで左から始まる値 0 に置き換えられるため、次のSTA 2000(3:3)ようにメモリ位置 2000 を離れます。- 1 2 0 4 5STA 2000(4:4)- 1 2 3 0 5

同様に、2000のバイトをの3バイトに置き換えSTA 2000(2:4)ます。- 1 8 9 0 5(2:4)rArA8 9 0+ 6 7 8 9 02 3 4- 1 2 3 4 5

これはクヌースの最も明確な瞬間ではありませんでしたが、あなたが示したページで彼の説明を注意深く読むと、これは明らかです.

于 2015-11-20T23:05:10.617 に答える