指示がありますMOV label, HL
。私は最初の行しか理解していませんが、2 番目の行はわかりませんMOV label, HL
。ZRとは?
そして、誰かがexecuteでそれらの行を説明してくれませんか。
この表は、CPU が命令 (コード 22h) を実行したときの命令の定義のように見えます。したがって、命令には、全体として、プロセス全体を実行するための 5 つのステップがあります。プログラマーであるあなたにとって、それはまだ 1 つの命令のように見えます。
Z80 は古い 8 ビット テクノロジであり、当時は一度に 64 ビットを読み取ることができませんでした (または、今日のキャッシュではそれ以上)。したがって、メモリへの各読み取りまたは書き込みは、一度に 1 ステップで 1 バイトでした。
この表は、各ステップで何が起こっているかを説明しています。これは、その CPU を搭載したコンピューターを構築しようとしている場合に特に重要です。ただし、サイクルに合わせて正確にする必要があるタイミングを含む何かをしない限り、チップをプログラミングしている場合はそれほど重要ではありません。
したがって、MOV label, HL
はアドレス ラベルのメモリからレジスタに 16 ビットを移動しますHL
。
(1) まず、プロセッサは PC で 1 バイトを読み取り、命令が 22h であることを確認します。ああ!それはMOV label, HL
です。
(2,3) プロセスは、メモリ アドレスを表す、PC からさらに 2 バイトを読み取る必要があることを認識しています。Z80 はリトル エンディアンであるため、最初に下位バイト (PC + 1 から) を読み取り、次に上位バイト (PC + 2 から) を読み取ります。
(4,5) ステップ (2,3) でロードされたアドレスは一時レジスタ ( と呼ばれる内部 CPU バッファZR
) にあり、メモリから 2 バイトを読み取るために使用されます。これらの 2 バイトはHL
レジスタに保存されます。HL
上位バイトと下位バイトを意味します。したがって、バイト atZR
がロードされL
、バイト atZR + 1
がロードされますH
(ここでも、レジスタをリトル エンディアンでロードしています)。
注: PC は最終的に 3 ずつインクリメントされ、1 バイトの読み取りに使用されるたびに 1 ずつインクリメントされる可能性があります。
そのため、 (64Kb アドレス指定可能メモリ内のハードコードされたアドレス) で指定されたメモリ バッファからダブル レジスタの内容をHL
一度にロードします。label
たとえば、HL
set toで開始し0x0000
、次の命令があるとします。
MOV 0x2345, HL
アドレス0x2345
にはバイト0x12が
あり、アドレス0x2346
にはバイト0x56があります
その後、次のHL
ようになります0x5612
。
命令は次のようにエンコードされます。0x22 0x45 0x23