[PP0906] 03. 何もしないプログラム
前回で擬似プロセッサの骨格ができました。今回からは、主記憶上のプログラムを実行できるようにしていきます。ただし、いきなり欲張っても難しいので、まずは"何もしないプログラム"からです。
ここで最初の命令を定義しましょう。何もしない命令は、通常 nop(ノップ)という名前で呼ばれます。nop というのは no operation の意味です。
| 命令 | 意味 |
|---|---|
| 0 | 何もしない |
この命令と終了コードである -1 を主記憶に格納し、それを実行させることにします。主記憶にプログラムを書き込むには、次のようにします。
- int 型の配列にプログラムを書き込む
- 上記のプログラムを memcpy 関数を使って主記憶に転送する
具体的には次のように書きます。
int program[] =
{
0,
-1
};
{
0,
-1
};
上の配列を main 関数の最初(具体的には永久ループの for(;;) に入る前)で転送します。転送は次のように書きます。memcpy 関数を使うには、<string.h> をインクルードする必要があることを忘れないでください。
memcpy(&memory[0], program, sizeof program);
そして、何もしない命令 0 を実行するための処理を追加します。デコーダである switch 文に case ラベルを追加してください。
switch (ireg)
{
case 0:
/* 何もしない */
break;
}
{
case 0:
/* 何もしない */
break;
}
これで命令 0 を実行することができるようになりました。しかし、これだけでは擬似プロセッサはまともに動作してくれません。もうひとつ大事なことを行わなければなりません。それがリセットです。リセットでは PC を 0 に設定します。次のコードを main 関数の最初に書いてください。
pc = 0;
いよいよこれで擬似プロセッサ PP0906 が動作するようになったはずです。コンパイルして実行してみてください。ウンともスンともいいませんね。それもそのはずです。"何もしない"プログラムなのですから。次回は、ウン、スンぐらいはいうようにしましょう。
この記事のトラックバックURL:
http://www.kijineko.co.jp/trackback/517
ブックナビゲーション
- 技術情報
- Boost C++ Libraries メモ
- C++と組込み環境
- C++サンプル集
- C++テンプレート集
- C++プログラマのためのC言語入門
- C/C++迷信集
- C99関数・マクロ・前処理スクリプト集
- C言語再入門
- C言語徹底入門
- Drupal メモ
- TOPPERS 情報
- ベターCとしてのC++
- マイコン メモ
- ライブラリ開発入門
- 分割コンパイルをきわめる
- 擬似プロセッサを作る
- PP0906 - 初級者向け擬似プロセッサ
- [PP0906] 00. 擬似プロセッサ PP0906 を作る
- [PP0906] 01. 擬似プロセッサ PP0906 の仕様
- [PP0906] 02. 主記憶と制御装置
- [PP0906] 03. 何もしないプログラム
- [PP0906] 04. 即値のロードと出力
- [PP0906] 05. レジスタ間の転送
- [PP0906] 06. ニーモニックを使う
- [PP0906] 07. ロードとストア
- [PP0906] 08. ジャンプ
- [PP0906] 09. スタック操作
- [PP0906] 10. コールとリターン
- [PP0906] 11. インクリメントとデクリメント
- [PP0906] 12. 条件分岐
- [PP0906] 13. 加算と減算
- [PP0906] 14. 不正命令例外
- [PP0906] 15. まとめ
- PP0906 - 初級者向け擬似プロセッサ
- 象の卵を探して...
- 車輪の再発明
- 過去の情報

