14

ゲームボーイの命令セットを調べていると、次のような命令に出くわしました。

LD A, A
LD B, B
LD C, C
LD D, D

...

これらの各命令には、この表に独自のオペコードがあります。これは、可能なオペコードの数の制限により、それらがある程度重要であると私に思わせます。

私は最初、そのレジスタ内のポインターを逆参照し、そのポインターに値を格納している可能性があると考えました (この質問のように) が、エミュレーターLD A, Aは次のように実装されています。

Z80._r.a = Z80._r.a

それらはプロセッサの状態に影響を与えないようで(レジスタを独自の値に設定するだけです)、NOP実行するのに a と同じサイクル数を要します。

これらのオペコードが命令セットに含まれているのはなぜですか? また、それらはどのような目的に役立ちますか?

4

2 に答える 2

5

これらの興味深い NOP 命令は、Intel 8008 という元の祖先プロセッサにまでさかのぼります。そのチップでは、レジスタ移動命令の実装の結果に過ぎませんでした。MOV A、A などを許可することで、命令デコーダが簡素化され、シリコン スペースが節約されました。

8080 から Z80 (およびそれ以降) まで、下位互換性を維持するためにこれらが必要になりました。彼らは x86 の世界にまで生き残りました。

MOV AL、ALなど

そのため、最近のほとんどのデスクトップ マシンは、これらの奇妙な命令をサポートしています。

注: Intel マシンについて説明するときは、Intel ニーモニックを使用しました。これらは、Zilog ニーモニックと同じバイナリ コードにアセンブルされます。

于 2018-05-21T15:36:50.290 に答える