学習目的で、アセンブリで単純なグラフィックベースのプログラムを作成しています。このために、OpenGL または SDL のいずれかを使用するつもりでした。アセンブリから OpenGL/SDL の関数を呼び出そうとしています。
問題は、インターネットで見つけた多くのアセンブリや OpenGL/SDL チュートリアルとは異なり、私のマシンの OpenGL/SDL は明らかに C 呼び出し規則を使用していないことです。私は C で簡単なプログラムを書き、アセンブリにコンパイルしました (-S スイッチを使用)。GCC によって生成されたアセンブリ コードは、スタックにプッシュされるのではなく、レジスタにパラメータを渡すことによって OpenGL/SDL 関数を呼び出すようです。
さて、問題は、これらの OpenGL/SDL 関数に引数を渡す方法をどのように決定するかということです。つまり、どの引数がどのレジスタに対応するかをどのように把握するのでしょうか?
明らかに、GCC は C コードをコンパイルして OpenGL/SDL を呼び出すことができるため、関数の引数とレジスタ間の対応を把握する方法が必要です。C 呼び出し規則では、ルールは簡単です。パラメーターを後方にプッシュし、eax/rax で値を返します。C のドキュメントを読むだけで、パラメーターを渡す方法を簡単に理解できます。しかし、これらはどうですか?
C 呼び出し規約を使用して OpenGL/SDL を呼び出す方法はありますか?
ところで、Gentoo Linux amd64 のリンカとして gcc/ld を使用して、yasm を使用しています。