なぜユニークなのですか? 多くの理由で。 順番に行きましょう:
1)スピード。 これはこれまでのところ、Minecraftでこのレベルの最速のプロセッサです。 1つの命令には約1秒かかります。
2)メモリの量。 RAMはすでに256バイトです。 このようなメモリ容量を持つ他のコンピューターは知りません。
3)計算能力。 42の指示。 算術、論理、スタック、入力/出力、レジスタなどで動作します。
4)アセンブラー。 他のプロセッサでは、プログラムをバイナリ形式で入力する必要があります。 ただし、DjCPU8では、テキストで入力できます。
5)シンプル。 他のコンピューターと簡単かつ快適に作業することは不可能です。
6)アプリケーションの幅。 I / Oポートはどこでも作成できます。
DjCPU8プロセッサの仕様:
1)ビット深度-8ビット。
2)フォンノイマンアーキテクチャ。
3)RAM 256バイト。
4)時計なし。 平均操作時間は1秒です。
5)データスタック-9バイト。
6)2つの汎用レジスタ(RON)。
7)42の指示。
8)エラーシステム。
9)1つのユーザー入力。
10)16個の出力ポート。
11)アセンブラー。
プロセッサの解剖学
この図は、プロセッサー内の機能ブロックを異なる色で示しています。
-RAM
-制御装置(UU)
-RAMリーダー/ライター
-命令の読み取り、そのデコード、および必要なレジスタのゼロ化のための信号供給デバイス。
-出力ポートへの出力
-物理的に実装されたアセンブラー
-スタック
-エラー検出システム
-さまざまなコンピューティングおよび変換ユニット。
そして、いくつかの小さなブロックがあります。
彼はどのように働いていますか
あなたを退屈させないために、このサブタイトルは非常に短くなります。
DjCPU8のアーキテクチャはFonneimannであるため、命令とデータが同じメモリにあることは明らかです。 プロセッサを起動すると、すべてのレジスタとスタックが完全にリセットされます。 次に、信号供給デバイス(青色で強調表示)が信号を送信して、RAMからデータを読み取ります。 結果の数値は命令として解釈されます。 この番号は制御ユニット(黄色)に送られ、そこで命令が実行されます。
loadステートメントを例に取りましょう。 この命令は、メモリから数値を読み取り、それをレジスタAに格納します。したがって、最初にメモリから数値3を読み取り、数値3を制御ユニットに供給します。 UUはこの番号をデコードし、これがロード命令であることを理解します。 次に、UEは指定された一連のアクションの実行を開始します。 最初に、プログラムカウンターのレジスタの値が1増加します。次に、2番目の数値が読み取られ、アドレスとして解釈されます。 アドレスが4であると仮定します。その後、UEは3回目の読み取り信号を送信します。 番号はセル4から取得されます。この番号はレジスタAに配置されます。次の命令を読み取るための信号が与えられます。 すべて、指示は完了しました。 想像してみてください。1秒でプロセッサがメモリに3回アクセスすることに成功しました。
複雑な指示があり、簡単な指示があります。 命令が単純であればあるほど、命令はより速く実行されます。 ただし、平均速度は約1 Hzです。
それをプログラムする方法は?
すべての指示を説明する小さなラベルは次のとおりです。
0 停止 -CPU停止
1 load RAM-RAMから数値を読み取り、Aに配置します
2 loadC const-特定のconst番号をAに入れます
3 ストア RAM-AをRAMに保存します
4 rand -A(0..255)の乱数を生成します
5 RAMの追加-RAMから値Aに値を追加します
6 サブ RAM-RAMから値Aから値が減算されます
7 mult RAM-AにRAMの値を乗算します
8 div RAM-AをRAMの値で除算します
9 および RAM-ビット演算「AND」:RAMからのAおよび値
10 または RAM-ビットごとのOR演算:AおよびRAMからの値
11 not-ビット演算「NO」A
12 2x -Aを2で割る
13 x / 2 -Aに2を掛ける
14 RAMの比較 -F = A-RAM
15 ジャンプA-アドレスがAにあるセルへの無条件ジャンプ
16 del RAM-RAMのセルをクリアします
17 say-チャットに値Aを表示します
18 A-R1 -AからR1への転送
19 A-R2 -AからR2への転送
20 R1-A -R1からAへの転送
21 R2-A -R2からAへの転送
22 inc -Aを1増やす
12月23日-Aを1減らす
24 プッシュ -数値をAからスタックに移動します
25 pop-スタックからAに数値を移動します
26 pushC const-スタックにconstをポップします(Aはconstと等しくなります)
27 in -CPUは一時停止し、Aの読み取りポートから数値を読み取ります
28 out -Aからポートへの番号の転送
29 setPort const-ポート値をconstに設定
30 印刷 -ポート0に番号を送信します
31 ジャンプ const-constセルへの無条件ジャンプ
A constの場合 32 ジャンプ -A> 0の場合はconstセルに移動し、そうでない場合は次のセルに移動します
33 F constの場合ジャンプ -F≠0の場合、セルconstに移動し、そうでない場合は次のセルに移動
34 ジャンプFでない場合-F = 0の場合、constセルに移動し、そうでない場合は次のセルに移動します
35 storeR1 -Aの値をメモリのR1にあるアドレスに格納します
36 storeR2 -Aの値をメモリのR2にあるアドレスに格納します
37 loadR1 -AのアドレスR1に値をロードします
38 loadR2 -AのアドレスR2に値をロードする
39 incR1 -R1の値を増やします
40 decR1 -R1の値を減らします
41 incR2 -R2を増加
42 decR2 -R2の値を減らします
プログラム例:
loadC
123
言う
指示について。 それらには2つのタイプがあります-パラメーターありとパラメーターなし。 パラメータは、命令の次のセルにある必要があります。 たとえば、loadCはパラメータを持つ命令です。 次の123は、loadCの単なるパラメーターです。 loadCは何をしますか? この命令は数値を受け取り、レジスタAに格納します。したがって、プロセッサは数値123をロードしました。次に何をしますか? そして、彼はこの番号で何でもできます! たとえば、チャットで番号を表示します。 sayコマンドはまさにそれを行います。
次に、パラメーターについて説明します。 また、constとRAMの2つのタイプがあります。 constパラメーターは特定の数値です。 loadCコマンドには、特定の番号が必要です。 また、RAMパラメーターは既に興味深いものです。 これは単なる数字ではなく、数字を取得する必要がある場所の住所です。 だから:
ロード前のプログラムとは異なり、このプログラムはまったく異なる方法で動作します! ロード命令には、別のタイプのパラメーター-RAMがあります。 したがって、番号123はすでにアドレスです。 どうなるの? プロセッサは、数値123に満足する代わりに、メモリにクロールし、123で数値を取得します。 しかし、私たちはそこで何も書いていないので、彼はゼロになります。 このプログラムを実行すると、レジスタAはゼロになります。 いいですか
123
言う
あなたは私のガイドからもっと学ぶでしょう。
そして、さらに便利なタブレットがあります。
なぜこのプロセッサを作成したのですか?
多くの人がこの質問をしていることに気付きました。 そして、彼らはそれを補完しさえします-「それはお金を稼ぐ方が良いでしょう」。
答えは簡単です-それは私に喜びを与えます。 PvPshitがDotaにあり、誰かがドローし、誰かがプログラムし、プロセッサを作成しているという事実に誰かが面白がっています。
これに加えて、プロセッサの作成中に、実際のプロセッサが実際にどのように機能するかを理解しました。
最後に、ビデオレビューをご紹介します。
よろしくお願いします!