PDP-11のサブルーチン呼び出しと復帰について
PDP-11のサブルーチン呼び出しと復帰には,"スタックは使わない".
じゃぁ,戻り番地はどこに格納されるのかというと,レジスタに保存される.
このレジスタをリンクレジスタというらしい.
PDP-11だけでなくARMもこのタイプらしい.でもPDP-11はちょっと変わってて,リンクレジスタの内容を
"スタックに退避する"(呼び出し時),"スタックから戻す"(復帰時)ようになっている.いやちょっとまて,それってさっきと言ってることがちがくないか??
要するにまとめると
という事らしい.
図を見るほうが早いから載せる.
PDP-11の場合
jsr r5, 0x76 STACK +------+ 2.COPY +------+ 1.PUSH +-----+ |PC(R7)|------->| R5 |------->| TOP | +------+ +------+ +-----+ rts r5 STACK +------+ 1.COPY +------+ 2.POP +-----+ |PC(R7)|<-------| R5 |<-------| TOP | +------+ +------+ +-----+
ARMの場合(ARM自体良く知らないので,想像)
jsr r5, 0x76 +------+ 1.COPY +------+ |PC(R7)|------->| R5 | +------+ +------+ rts r5 +------+ 1.COPY +------+ |PC(R7)|<-------| R5 | +------+ +------+
jsr 0x76 STACK +------+ 1.PUSH +-----+ |PC(R7)|------->| TOP | +------+ +-----+ rts STACK +------+ 1.POP +-----+ |PC(R7)|<-------| TOP | +------+ +-----+