Lions' 本読み (63)
朝練メモ。間接、というヤツがよく分からん。これはマニュアル見た方が良いのかな。
トラップを起こした命令の下 6bit が 0 の場合、古い PC の値は番地になってて、その中にシステムコール呼び出しな命令がある、ということなのか。
fuiword
10 章で出てきてるんですが、中身を確認してませんでした。見てみます。
0844 _fuiword: 0845 _fuword: 0846 mov 2(sp),r1 0847 fuword: 0848 jsr pc,gword 0849 rts pc
引数を r1 に格納して gword に jmp してます。gword が終わったら 0849 経由で呼び出し元に戻ります。gword は直下で以下。
0851 gword: 0852 mov PS,-(sp) 0853 bis $340,PS 0854 mov nofault,-(sp)
PS および nofault をスタックに退避。PS を操作して優先度を最高にしてます。
0855 mov $err,nofault 0856 mfpi (r1) 0857 mov (sp)+,r0 0858 br 1f
nofault に例外処理な番地をセットして mfpi 命令を呼び出してます。mfpi は 渡された番地の情報をスタックに push して戻すので、何もなければスタックから pop して r0 に格納。ちなみに例外発生時には 0880 以降の処理に制御が移ります。
例外の時には fuiword への戻りもスキップして呼び出し元に戻るんですね。
で、以下な後始末をして終了。
0875 1: 0876 mov (sp)+,nofault 0877 mov (sp);,PS 0878 rts pc
nofault および PS をスタックから復帰させてます。ここで優先度も元に戻ります。