[PP0906] 03. 何もしないプログラム

前回で擬似プロセッサの骨格ができました。今回からは、主記憶上のプログラムを実行できるようにしていきます。ただし、いきなり欲張っても難しいので、まずは"何もしないプログラム"からです。

ここで最初の命令を定義しましょう。何もしない命令は、通常 nop(ノップ)という名前で呼ばれます。nop というのは no operation の意味です。

命令 意味
0 何もしない

この命令と終了コードである -1 を主記憶に格納し、それを実行させることにします。主記憶にプログラムを書き込むには、次のようにします。

  1. int 型の配列にプログラムを書き込む
  2. 上記のプログラムを memcpy 関数を使って主記憶に転送する

具体的には次のように書きます。

int program[] =
{
  0,
  -1
};

上の配列を main 関数の最初(具体的には永久ループの for(;;) に入る前)で転送します。転送は次のように書きます。memcpy 関数を使うには、<string.h> をインクルードする必要があることを忘れないでください。

memcpy(&memory[0], program, sizeof program);

そして、何もしない命令 0 を実行するための処理を追加します。デコーダである switch 文に case ラベルを追加してください。

switch (ireg)
{
case 0:
  /* 何もしない */
  break;
}

これで命令 0 を実行することができるようになりました。しかし、これだけでは擬似プロセッサはまともに動作してくれません。もうひとつ大事なことを行わなければなりません。それがリセットです。リセットでは PC を 0 に設定します。次のコードを main 関数の最初に書いてください。

pc = 0;

いよいよこれで擬似プロセッサ PP0906 が動作するようになったはずです。コンパイルして実行してみてください。ウンともスンともいいませんね。それもそのはずです。"何もしない"プログラムなのですから。次回は、ウン、スンぐらいはいうようにしましょう。

この記事のトラックバックURL:

http://www.kijineko.co.jp/trackback/517
このエントリーを含むはてなブックマーク