- ベストアンサー
Cとアセンブリ
OS等のソースを見るとC/C++とアセンブリのソースを組み合わせてリンクさせていますが、具体的にどのような手順で行っているのですか?リンカの設定を自分で行うのですか?(アセンブリはCPUやFirstBoot、ディスクアクセス関係等の担当でC/C++はそれ以外の部分だということは分かっています。)教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
具体的なことは、ターゲットや開発環境によるので、一般的なことだけ書きます。 C/C++とアセンブリで書かれたコードをリンクさせるのは、それほど難しいことではありません。C/C++からアセンブリのコードを呼び出す(あるいはその逆)には、コーリングコンベンションをあわせるだけです。 例えば、Cで書かれた外部識別子は、アセンブラから使用する際はアンダースコアが付く(処理系によります)などの決まりがあります。C++の場合には、引数情報も外部シンボルに反映されるので、もっと複雑になります。 また、引数はスタックに積むのか、決まったレジスタが使われるのか、返却値の返し方はどうか、さらには関数を呼ぶ際に値を退避すべきレジスタはどれかといったルールをあわせる必要があるわけです。 OS等の場合であれば、ターゲットに応じてメモリマップを設定する必要があります。お察しの通り、メモリマップの設定はリンカで指定します(指定方法は処理系依存)。 他にも、割り込みやCPU例外等に関わるコード(ベクタテーブル等)も記述する必要があります。
お礼
詳しい説明ありがとうございます。 GCCを使用しているので http://www.ertl.jp/~takayuki/readings/c/no06.html あたりが参考になりそうです。