5つのプロセッサで、関数呼び出しの方法をまとめました。
MIPS | sparc | sh | ARM | x86 | |
---|---|---|---|---|---|
レジスタ渡し可能な引数 | 4個まで | 6個まで | 4個まで | 4個まで | スタックを使用 |
戻り先の格納先 | register | register | stack | register | stack |
関数の呼出し | jal | call | jsr | bl | call |
関数からの戻り方 | j | jmp | rts | mov | ret |
組み込みの人が使うプロセッサだと、引数は4個まではレジスタ渡しが多いです。
関数を呼び出すときは戻り先の保存があるので、全てのアーキテクチャで専用の命令が用意されています。関数からの戻り方はまちまちですが、RISCの場合戻り先が保存されているレジスタを使って無条件ジャンプする方法が多いです。
call/retの議論はこちらも面白いです。
http://alohakun.blog7.fc2.com/blog-entry-952.html