標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第98回]

●RET命令

前回はCALL命令について説明しました。
今回はRET命令について説明します。

RETの命令コードは
11001001 (16進数ではC9)
です。
JMP命令やCALL命令とは違ってOPコードのみの命令(1バイト命令)です。

CALL命令によって呼び出されるプログラム(サブプログラムまたはサブルーチンといいます)はRET命令で終わります。
RET命令によって、CALL命令の次のアドレスに戻って、処理を続けることができます。

CALL命令は、RETによってCALL命令の次のアドレスに戻ってくることができるように、そのアドレスをスタックに格納してからサブルーチンにジャンプします。
RET命令はCALL命令がスタックに保存した戻り先アドレスをスタックから取り出して、PC(プログラムカウンタ)にセットします。

●RET命令のタイミングチャートです



JMP命令やCALL命令に比べるとRET命令の動作は簡単です。
現在のSP(スタックポインタ)が示すメモリアドレスからデータ(実は戻り先アドレスの下位8ビット)を読み込んで、PC(プログラムカウンタ)の下位8ビットに書き込みます。次にSP(スタックポインタ)を+1して、SP(スタックポインタ)が示すメモリアドレスからデータ(戻り先アドレスの上位8ビット)を読み込んでPC(プログラムカウンタ)の上位8ビットに書き込みます。
最後にもう一度SP(スタックポインタ)を+1して、作業を終了します。
PC(プログラムカウンタ)には、戻り先のアドレスがセットされましたから、次はPC(プログラムカウンタ)が示すメモリアドレスから実行が続けられます。

JMP命令やCALL命令と同じように、RET命令にも、条件RET命令があります。
条件が成立するときは普通のRET命令と同じ動作になります。
条件が不成立のときは、T4でMclrが出力されるので、何もしないですぐに次の命令に進みます。

●RET命令の回路図です



●条件RET命令

8080の条件RET命令は全部で8命令あります。
マシン語コードとニーモニックとで示します。  

命令コード ニーモニック 意味
11111000 RM 値が負のときにRET実行
11110000 RP 値が正のときにRET実行
11101000 RPE 偶数パリティのときにRET実行
11100000 RPO 奇数パリティのときにRET実行
11011000 RC キャリーがあるときにRET実行
11010000 RNC キャリーがないときにRET実行
11001000 RZ 結果が0のときにRET実行
11000000 RNZ 結果が0でないときにRET実行

条件が成立するときは普通のRET命令と同じ動作になりますから、RET命令の回路図でわかるように、普通のRET命令と条件RET命令(RX)は同じ回路になっています。

条件が成立しないときに、T4以後の動作をキャンセルする仕組みについては、条件JMP命令と同じです。
[第63回]でくわしく説明していますので、そちらを参照してください。
2008.10.17upload

前へ
次へ
ホームページトップへ戻る