z80
Z80のメモリ空間はプログラムとデータで共通で、16ビットのアドレスにより1バイト単位でアクセスできる。
また、8ビットの入力ポートおよび出力ポートを256個ずつもち、8ビットのアドレスにより指定する。
Z80は、以下のレジスタを持つ。
レジスタ | 説明 |
---|---|
A | アキュムレータ (メイン) |
F | フラグレジスタ (メイン) |
A' | アキュムレータ (代替) |
F' | フラグレジスタ (代替) |
アキュムレータは8ビットで、演算の引数や結果を格納する。
フラグレジスタは8ビットで、以下のような演算結果の情報を格納する。
ビット | 記号 | 名前 | 説明 |
---|---|---|---|
7 (MSB) | S | Sign Flag | 演算結果の最上位ビット |
6 | Z | Zero Flag | 演算結果がゼロか / 比較や検索で一致したか |
5 | X | - | - |
4 | H | Half Carry Flag | 8ビット演算の真ん中でキャリーやボローがあったか |
3 | X | - | - |
2 | P/V | Parity/Overflow Flag | 符号あり加減算がオーバーフローしたか / ビット演算の結果の1のビットが偶数個か / など |
1 | N | Add/Subtract | 加算後は0、減算後は1 (10進補正用) |
0 (LSB) | C | Carry Flag | キャリーやボローがあったか / シフトではみ出たビット |
メインと代替のアキュムレータおよびフラグレジスタの値は、EX AF, AF'
命令により同時に入れ替えることができる。
メイン | 代替 | |||
---|---|---|---|---|
レジスタペア | 上位 | 下位 | 上位 | 下位 |
BC | B | C | B' | C' |
DE | D | E | D' | E' |
HL | H | L | H' | L' |
B, C, D, E, H, L
レジスタは各8ビットで、2個のレジスタを合わせて16ビットのレジスタペアとして扱える。
B', C', D', E', H', L'
レジスタは各8ビットで、EXX
命令により同時にそれぞれ対応するレジスタと値を入れ替えることができる。
レジスタ | サイズ | 名前 | 説明 |
---|---|---|---|
PC | 16ビット | Program Counter | 実行するためにメモリから読み込む命令の位置を格納する。 |
SP | 16ビット | Stack Pointer | スタックトップのアドレスを格納する。 |
IX | 16ビット | Index Register | 即値のオフセット付きでメモリにアクセスするときのベースアドレスを格納する。 |
IY | |||
I | 8ビット | Interrupt Vector | 割り込みモード2で参照するテーブルのアドレスの上位を格納する。 |
R | 8ビット | Memory Refresh | 命令フェッチごとに下位7ビットをインクリメントする。 |