めざせ4004! IC24個で電卓用CPUを作ってみた: Chapter 3-3 命令コード

 EX4-2024の命令コードは前出の表3にインデックスレジスタを追加した物となります。インデックスレジスタは全て8ビット幅で3本あり、それぞれX、Y、Zと命名します。これらはRAMアドレス指定に使います。

 以下の表5をご覧ください。EX4-2024ではRAMアドレスは全て  [ir+Ofs]  という形式で指定します。これはインデックスレジスタX、Y、Zどれかと、命令2バイト目で指定されるオフセット(Ofs)との合計がRAMアドレスとなる、という意味です。

表5 EX4-2024の命令コード
命令1バイト目2バイト目キャリーフラグ説明
bit 7~4bit 3~0
ADDA, [ir+Ofs]000000irOfs※1指定アドレスのRAMの値をAレジスタに加算
ADDB, [ir+Ofs]000100irOfs※1指定アドレスのRAMの値をBレジスタに加算
ADDA, Im001000ir00000000※1定数(Im)をAレジスタに加算
ADDB, Im001100ir00000000※1定数(Im)をBレジスタに加算
LDA, [ir+Ofs]010000irOfs指定アドレスのRAMの値をAレジスタに格納
LDB, [ir+Ofs]010100irOfs指定アドレスのRAMの値をBレジスタに格納
LDA, Im011000ir00000000定数(Im)をAレジスタに格納
LDB, Im011100ir00000000定数(Im)をBレジスタに格納
SUBA, [ir+Ofs]100000irOfs※2指定アドレスのRAMの値をAレジスタから減算
SUBA, [ir+Ofs]100100irOfs※2指定アドレスのRAMの値をBレジスタから減算
ST[ir+Ofs], A101000irOfsAレジスタの値を指定アドレスのRAMに格納
ST[ir+Ofs], B101100irOfsBレジスタの値を指定アドレスのRAMに格納
LEAirt, [irs+Ofs]1100irtirsOfsインデックスレジスタのアドレス計算
JNCAdr1110Adrキャリーがゼロなら指定アドレス(Im)にジャンプ
JMPAdr1111Adr指定アドレス(Im)にジャンプ
※1 最上位ビットからの繰り上げが発生した場合に1になる。発生しない場合には0になる。
※2 結果が正(ゼロ以上)になった場合に1になる。結果が負の場合には0になる。

 表5の1バイト目のbit3~0の列にirという項目がありますが、これがインデックスレジスタの選択ビットです。以下の意味を持ちます。

表6インデックスレジスタ(ir)のビット指定と意味
Irビットアセンブラ表記動作
00[Adr]インデックスレジスタなし。命令の2バイト目で示されるオフセット(Ofs)の値がそのまま目的のRAMアドレスとなる
01[X+Ofs]インデックスレジスタXの値とオフセット(Ofs)の合計がRAMアドレスとなる
10[Y+Ofs]インデックスレジスタYの値とオフセット(Ofs)の合計がRAMアドレスとなる
11[Z+Ofs]インデックスレジスタZの値とオフセット(Ofs)の合計がRAMアドレスとなる