[PP0906] 06. ニーモニックを使う

前回、命令数が増えてきたこともあり、命令を数値のまま扱うのが辛くなってきたと書きました。実際その通りで、もう少し命令を扱いやすくするために、何らかの工夫が必要になります。そこで、単なる数値に過ぎなかった各命令に、もう少し分かりやすい名前を付けることにします。この名前のことをニーモニックといいます。

これまでに出てきた命令にニーモニックを与え、下記の表のようにまとめてみました。

命令 ニーモニック 命令長 意味
0 NOP 1 何もしない
1 LI 2 アキュムレータに即値をロードする
2 LXI 2 インデックスレジスタに即値をロードする
3 OUT 1 アキュムレータの値を出力する
4 MOVAX 1 インデックスレジスタの値をアキュムレータに転送
5 MOVXA 1 アキュムレータの値をインデックスレジスタに転送
6 MOVSX 1 インデックスレジスタの値をスタックポインタに転送
7 MOVXS 1 スタックポインタの値をインデックスレジスタに転送

ニーモニックの付けかたについては好みもありますし、これが一番よいというわけでもありませんが、とりあえずこのようにしたいと思います。これらのニーモニックをマクロとして定義しておけば、C 言語で書く場合でもニーモニックを使うことができるようになります。次のマクロ定義をソースファイルの最初のあたり(ヘッダをインクルードした直後あたりがよいでしょう)に追加してください。以後、命令を追加していくたびに、このマクロ定義も増やしていく必要があります。

#define NOP    0
#define LI     1
#define LXI    2
#define OUT    3
#define MOVAX  4
#define MOVXA  5
#define MOVSX  6
#define MOVXS  7

ニーモニックを使って、前回のプログラムを書き直すと次のようになります。

int program[] =
{
  LXI, 123, /* X ← 123 */
  MOVAX,    /* A ← X */
  OUT,      /* Aの値を出力 */
  LI, 456,  /* A ← 456 */
  MOVXA,    /* X ← A */
  MOVAX,    /* A ← X */
  OUT,      /* Aの値を出力 */
  -1
};

このように、あまりにも非人間的な機械語の命令にニーモニックを与えることで、多少なりとも人間が扱いやすくなるように工夫することが、アセンブリ言語の出発点です。ここでは、アセンブラというアセンブリ言語を機械語に翻訳するための専用プログラムを用意するのではなく、単なる C 言語のマクロを使ってニーモニックを書けるようにしただけですので、本格的なアセンブラに比べると非力ですが、それでも無いよりはずっとましです。

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

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