めざせ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アドレスとなる、という意味です。
| 命令 | 1バイト目 | 2バイト目 | キャリーフラグ | 説明 | |||
|---|---|---|---|---|---|---|---|
| bit 7~4 | bit 3~0 | ||||||
| ADD | A, [ir+Ofs] | 0000 | 00 | ir | Ofs | ※1 | 指定アドレスのRAMの値をAレジスタに加算 |
| ADD | B, [ir+Ofs] | 0001 | 00 | ir | Ofs | ※1 | 指定アドレスのRAMの値をBレジスタに加算 |
| ADD | A, Im | 0010 | 00 | ir | 00000000 | ※1 | 定数(Im)をAレジスタに加算 |
| ADD | B, Im | 0011 | 00 | ir | 00000000 | ※1 | 定数(Im)をBレジスタに加算 |
| LD | A, [ir+Ofs] | 0100 | 00 | ir | Ofs | - | 指定アドレスのRAMの値をAレジスタに格納 |
| LD | B, [ir+Ofs] | 0101 | 00 | ir | Ofs | - | 指定アドレスのRAMの値をBレジスタに格納 |
| LD | A, Im | 0110 | 00 | ir | 00000000 | - | 定数(Im)をAレジスタに格納 |
| LD | B, Im | 0111 | 00 | ir | 00000000 | - | 定数(Im)をBレジスタに格納 |
| SUB | A, [ir+Ofs] | 1000 | 00 | ir | Ofs | ※2 | 指定アドレスのRAMの値をAレジスタから減算 |
| SUB | A, [ir+Ofs] | 1001 | 00 | ir | Ofs | ※2 | 指定アドレスのRAMの値をBレジスタから減算 |
| ST | [ir+Ofs], A | 1010 | 00 | ir | Ofs | - | Aレジスタの値を指定アドレスのRAMに格納 |
| ST | [ir+Ofs], B | 1011 | 00 | ir | Ofs | - | Bレジスタの値を指定アドレスのRAMに格納 |
| LEA | irt, [irs+Ofs] | 1100 | irt | irs | Ofs | - | インデックスレジスタのアドレス計算 |
| JNC | Adr | 1110 | Adr | - | キャリーがゼロなら指定アドレス(Im)にジャンプ | ||
| JMP | Adr | 1111 | Adr | - | 指定アドレス(Im)にジャンプ | ||
表5の1バイト目のbit3~0の列に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アドレスとなる |