Lions' 本読み (62)

イキオイで 12 章に突入しますが、行ったり戻ったりするはず。
ちなみに、u.u_ar0 で引数を云々する件ですが、350p でいきなりそれに関する記述がありました。衝撃の事実、ってカンジ。記述が以下。マニュアル確認するべきなのかどうなのか。

しかし、trap や割り込みハンドラがそれらのパラメータの値を変更すると、その新しい値は前モードレジスタが元に戻されるときに拾い上げられて反映される。

(Lions' Commentary on UNIX より引用)
比叡山延暦寺
あと、trap 手続きは基本的に引数で渡される dev の値に沿って条件分岐してるんですが、この値が設定されているのが以下。

0781    mov    4(sp),-(sp)
0782    bic    $!37,(sp)

4(sp) は 344p の図 10.1 で言えば nsp を指してます。カレントな sp が sp な場所を指しててその二つ前、で -(sp) に代入するので dev な場所に格納されるという理解で良いのかどうなのか。
で、0782 で末端 5bit を拾ってる形になってる、はずなんですが、これが dev ってことで良いのかどうなのか。
ちょっと混同してしまっていたのですが、これとシステムコールエントリなナニとは異なりますね。ということで丁度良いのでシステムコールの部分を見てみます。

2754            callp = &systent[fuiword(pc-2)&077];

何故に pc-2 かと思ったら pc には戻り番地が入るからその直前の命令、ってことなのか。fuiword はその番地の命令を戻してケツの 6 bit を取り出しているのでシステムコールな番号、ということになるのかどうなのか。
ちなみに例の参考書籍にアセンブラシステムコールな番号を trap なオペコードに埋め込んでいることを確認している記述があります。このリバース具合は凄い。

ちょっと今日は

ここで止めます。