標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第64回]
●STA命令とLDA命令
今回はSTA命令とLDA命令について説明します。
STA(store A direct)はAレジスタの値を、この命令コードに続く2バイトで示すメモリアドレスに書き込む命令です。
LDA(load A direct)はSTAとは逆に、命令コードに続く2バイトで示すメモリアドレスの値をAレジスタに書き込む命令です。
命令コードは次の通りです。
命令コード(2進数) 命令コード(16進数) ニーモニック
00110010 32 STA adrs
00111010 3A LDA adrs
adrsは16ビットの値で、前回説明したJMP命令のアドレスと同じ用法です。
命令コードの次のメモリアドレスに、指定アドレスの下位バイトを置き、さらにその次のメモリアドレスに、指定アドレスの上位バイトを置きます。
たとえば、アセンブラニーモニックで、
STA 1234
と書くと、この命令は、Aレジスタの値を1234番地に書き込め、という命令になります。
マシン語コードは、指定アドレスを含めると3バイトになります。
上記のSTA 1234 が、メモリの0100番地から書かれている例を下に示します。
アドレス 2進数 16進数 ニーモニック
0100 00110010 32 STA
0101 00110100 34 (下位アドレス)
0102 00010010 12 (上位アドレス)
同じ例をLDA命令の場合について示します。
アドレス 2進数 16進数 ニーモニック
0100 00111010 3A LDA
0101 00110100 34 (下位アドレス)
0102 00010010 12 (上位アドレス)
●STA命令、LDA命令のタイミングチャートです
T4〜T7の期間の動作はJMP命令と全く同じです。
2バイトの値をメモリから読み込んで、ワークレジスタWKL、WKHに格納します。
JMP命令では読み込んだワークレジスタの値を、PC(プログラムカウンタ)にコピーしましたが、STA命令、LDA命令では、ワークレジスタの値をそのまま外部アドレスバスに出力します。
WKselという信号をアクティブにすると、ワークレジスタと外部アドレスバスを仕切っている74HC244が開いて、ワークレジスタ(WKH、WKL)の値が外部アドレスバスに出力されます。
WKselについては、ワークレジスタの回路図([第23回])を参照してください。
その状態で、STAの場合にはAレジスタの値をメモリに書き込みます。
LDAの場合にはメモリの値をAレジスタに書き込みます。
メモリとレジスタの間のMOV命令と同じようですが、MOV命令のメモリはHLレジスタでメモリアドレスを示したのに対して、STA命令、LDA命令では、WKレジスタの値でメモリアドレスを示します。
STA命令では、T8、T9でAレジスタの値をデータバスに出力するためにregRDをアクティブにしていますが、s3〜s0がありません。
Aレジスタはs3〜s0=”1111”で選択されるので、何も指定しなくてregRDをアクティブにするだけでよいのです。
同じ理由でLDA命令ではT8でregWRのみアクティブにしています。
●STA命令、LDA命令の回路図です
図の右上のところで、PCtoReg16をアクティブにしています。
PCtoReg16はJMP命令の回路図([第62回])にありました。
T4〜T7の部分がJMP命令と全く同じです。この部分は他の命令にも共通しているものがありますから、命令回路から独立させて、他の命令回路でも利用できるようにしてあります。
PCtoReg16信号をアクティブにするだけで、JMP命令、STA命令などの、T4〜T7の動作を実行します。
2008.9.11upload
前へ
次へ
ホームページトップへ戻る