私はゲームボーイエミュレーターに取り組んできLD A, A
ましLD B, B
たAND A
. 最初のものは、レジスタの値を同じレジスタにロードするため、明らかに何も変更しません。 はレジスタAND
と比較されているため、常に が返されます。これらの操作には何らかの目的がありますか、それとも各サイクルの後と本質的に同じですか?A
AND A
A
NOP
3 に答える
Jeffrey BosboomとHans Passantがコメントで指摘したように、その理由はシンプルさです。より具体的には、ハードウェアのシンプルさ。
LD r,r'
命令は、ソース レジスタ ( r'
) の内容をデスティネーション レジスタ ( ) にコピーしますr
。LD r,r'
オペコードは次の形式に従います。
-------------------------------
BIT | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
-------------------------------
OPCODE | 0 | 1 | r | r' |
-------------------------------
デスティネーション レジスタとソース レジスタは、次の値を想定できます。
-----------
| BIT | REG |
-----------
| 111 | A |
-----------
| 000 | B |
-----------
| 001 | C |
-----------
| 010 | D |
-----------
| 011 | E |
-----------
| 100 | H |
-----------
| 101 | L |
-----------
これらの命令をハードウェアで実装するには、ビット 0 ~ 2 を受信してソース レジスタを選択するマルチプレクサと、ビット 3 ~ 5 を受信してデスティネーション レジスタを選択する別のマルチプレクサが必要です。
ビット 0 ~ 2 とビット 3 ~ 5 が同じレジスタを指しているかどうかを確認するには、CPU にさらにロジックを追加する必要があります。ご存知のように、リソースは 80 年代にはもっと限られていました :P
LD A,A
、、、、、、、などのロード命令はのようLD B,B
に動作することに注意してください。ただし、 とのように動作しないでください。これらはフラグ レジスタに影響し、実行によって内部マシンの状態が変わる可能性があるためです。LD C,C
LD D,D
LD E,E
LD H,H
LD L,L
NOP
AND A
OR A
NOP
(および)命令には実際には目的があります-ゼロの場合はフラグを設定し、それ以外の場合はクリアします。そのため、との両方がこの目的で頻繁に使用されます。AND A
OR A
Z
A
AND A
OR A