なんですが簡単なコマンドラインの説明があるだけで言語仕様については何の説明もありません。
先ず関数のコール。
main関数から空のtest関数を呼ぶプログラムですが、アセンブラ出力は下段のような形です
関数のコールにはR12でポイントされた処理へ分岐。
関数からのリターンはR13でポイントされた処理へ分岐というのはわかります。
ですがコール処理、リターン処理の実体とその処理の先頭アドレスをR12,R13にあらかじめセットしておかなければ全く使い物になりません。
一方、関数への引数と返り値の受け渡しはこんな感じ。
R14がスタックポインタ、R8が返り値を格納するレジスタのようですが、やはりそのためにもスタックポインタの初期化等、前処理は必要なはずです。
ところで上のソース、最初は普通に
main(int x)
と引数の型を括弧の中に書いたのですがどうしてもコンパイラがエラーになり通りません。
なんとK&R作法なのですね
main(x)
int x;
{
・・・・・・
}
で通りました。
昔Cを始めたころにそういう書き方をしたことがある気もしますが、それ以来です