1

Minecraft で単純な RAM メモリ (レッドストーンを使用) を作成しました。アドレス用に 4 ビット、各セルに 4 ビットが格納されています。次の目標は、さまざまな種類の変数をそこに格納し、それらを異なる方法で処理することです。

私たちはエンジニアではないのでよくわかりませんが、非常に複雑なものをいくつか作成しており、これができると考えています。問題は、1 つのセルに格納できるより多くのビットの変数を格納する方法がわからないことです。例を挙げます。

16ビット変数を考えてください。大きなセルを作っても意味がないと思ったので、各セルに4ビットを格納するデータを格納することにしました。しかし、それだけでは十分ではありません。これらの 4 つのセルを関連付ける必要がありました。そこで、4 ビットのコンテンツと、変数の次の 4 ビットが格納されるアドレスを格納するための 4 ビットを備えた 8 ビットのセルを作成する必要があると考えました。ただし、RAM には 4 ビットのアドレスはありません。そこには何も格納できません。したがって、アドレスには少なくとも 8 ビットが必要です。コンテンツの 4 ビットも非常に少ないようで、変数の型を格納するために少なくとも他の 4 ビットも必要です。

ええと、最終的に私たちはそのテクニックはばかげていると思いました。そして、私たちは今それを行う方法を知りません。RAM がどのように機能するかについて Web で検索しましたが、私が見つけたいくつかは、私たちのニーズに対して複雑すぎるものでした。

誰かがこれが実際にどのように行われるか説明してもらえますか?

4

1 に答える 1

2

ねえ、あなたは非難ゲームをプレイしていて、メモリ管理のすべての責任を物理 RAM 実装に固定しようとしています。

実際、RAM は単なるストレージ デバイス (レッドストーン タイル) であり、実際にそこにデータを格納するのはプログラムの責任です。言い換えれば、RAM に標準化されたメモリ セルの「リンク」戦略は必要ありません。これは、RAM に書き込みを行ってから読み戻すのはプログラムであるため、独自の一般的な慣行を知っているためです。

それを念頭に置いて、値を保存するのは簡単です。16 ビット整数を 4 ビット/ワード RAM (つまり 4 ワードのデータ) に格納するとします。アドレス 0 ~ 4 を変数として参照するだけです。「リンク」は必要ありません。どちらもそれから読み書きする方法を知っており、(理論的には)自分のつま先を踏むことはないからです。

コンストラクトを拡張するための追加の考慮事項: 特殊なレジストリの特別な場所 (再帰計算にスタックを使用するためのスタック ポインター、チューリング マシン用のプログラム ポインターなど)。もう一つあったのですが、書いている途中で忘れてしまったので、思い出せたら編集します..

于 2012-10-25T16:41:01.833 に答える