コンパイラがさまざまな方法でコードを生成するので、どのようにC言語とアセンブリを混在させることができますか?たとえば、多くのCコンパイラは、関数呼び出し時にスタックにプッシュするのではなくレジスタを使用します。 C関数を呼び出す代わりにレジスタを設定するのではなく、スタックに引数をプッシュする別のコンパイラによって作成されたオブジェクトファイルを使用してアセンブリコードを作成したりリンクしたりすると、メモリの場所が適切になります。Cとアセンブリどのように動作するのですか?
私の推測では、Cコンパイラアセンブリの出力はそれほど巧妙なやり方で行いましたが、違いはなく、まだ動作しますが、表示されないアセンブリコードを確認することはできませんそれは動作します。
私はコンパイラを書いているので誰でも私の質問に答えることができ、これを知る必要があるので、将来私はCモジュールとリンクしたいと思います。
Cコードとアセンブリコードは、同じ呼び出し規約に従う必要があります。彼らが別のコンベンションを使用している場合は、予期しない動作が発生する可能性があります。 –
_ "多くのCコンパイラは、関数呼び出し中にスタックにプッシュするのではなく、レジスタを使用します。コンパイラが従う "呼び出し規約"があります。 –
ちょうどそれが言及している:*インラインアセンブリ*は必ずしも**任意の**呼び出し規約を遵守する必要はありません、レジスタの使用法だけで(私はそれを好むとは思わない) – tofro