More Related Content
Similar to Embeded2020318 (6)
Embeded2020318
- 16. 命令セット
• CPUが実行可能な命令データの集まり
• 通常はメモリ上から二進値でCPUに読み込まれる
• 二進値をニーモニックという英字記号名で扱う
★命令の種類
• データ転送命令(メモリとCPUレジスタ間、メモリ間)
• 加減算等の算術演算、比較、ビット、論理演算等の命令(乗除算命令をも
ないCPUもある)
• 分岐命令(計算結果による条件分岐と無条件分岐がある)
• 割り込み・例外処理命令(主に割込発生時に使用する)
• スタック・サブルーチン呼び出し命令(古いアーキテクチャーではもたな
いCPUもあるがアドレスレジスタと分岐命令を駆使して実現可能)
• 入出力命令(周辺装置間とのデータ入出力命令でもたないCPUもある)
- 23. サブルーチン命令
• 分岐命令の一種
• スタック操作が同時に行われ、スタックフレームというメモリ領域を使用し、高級プログラミング
言語でのローカル変数管理が可能
• サブルーチンに分岐して処理完了後、呼び出し元の命令アドレスに復帰するための機構
• スタックポインタというレジスタが専用的に使用されるがこれはアドレスレジスタの一種である。
スタックフレーム管理のためにフレームポインタというもうひとつのアドレスレジスタも併用する
• サブルーチンを呼ぶ命令ではリターンアドレスをスタックに積んでからサブルーチンアドレスに分
岐する(引数がある場合は呼び出し前に引数データをスタックに積む)
• サブルーチンの最初では呼び出し元のフレームポインタをスタックに積み(保存)、現在のスタッ
クポインタを自身のフレームポインタとする(必要に応じてローカル変数分スタックフレームを使
用する)
• サブルーチンの最後ではスタック位置を調整(ローカル変数領域を始末し、呼び出し元のフレーム
ポインタを復帰する)してからリターン命令により呼び出し元がスタックに積んだリターンアドレ
ス(戻り位置)に分岐する
• ソフトウェア割り込み命令や例外も(特殊な)サブルーチン命令である
※古いアーキテクチャーでは命令として実装してないものもある(IBMの大型汎用機等)
- 34. 呼び出し元関数の入り口と出口処理
_main:
push fp ;呼び出し元のfp内アドレス値をスタックに保存
mov sp,fp ;関数入り口時点のスタック位置をこの関数のfpとする
.......... ;任意の処理
mov #1,r0 ;関数に渡す引数の値1を用意
push r0 ;関数に渡す引数をスタックに積む
jsr _sub_routine ;関数呼び出し
add #4,sp ;引数に使用したスタック領域を解放
...... ;任意の処理
mov fp,sp ;ローカル変数領域解放(スタック位置は自身のfp)
pop fp ;呼び出し元のfpを復帰(スタック位置は戻りアドレス)
ret ;現在のスタック位置にある戻りアドレスに分岐してスタック解放