2016-09-06 7 views
0

アセンブリについて読んでいました。アセンブリでの呼び出しルーチンの規則について(特に、Linux)。アセンブリにprintfに8つ以上の浮動小数点値を渡す方法

なお、第8の浮動小数点パラメータはxmm0を介して渡されていると言われている - xmm15、レジスタrdiの他のパラメータ、rsirdxrcxr8r9、及び他の残りのパラメータは、逆の順序でスタックにプッシュされるべきです。

8個以上の浮動小数点パラメータと6個以上の他のパラメータがある場合、それらをスタックにプッシュする順序はどうでしょうか? 8 fpに収まらない最初の浮動小数点値。レジスタ、または6つのレジスタに収まらないその他のパラメータ?

答えて

2

ABIの文書のどの部分が不明ですか(https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI)?

intとfpの引数が混在していて、両方の種類のarg-passingレジスタが足りなくなったらどうなりますか?

IIRCの順番で、スタックの最後の引数が最も高いアドレスになり、最初の非レジスタargがリターンアドレスのすぐ上になります。これは、32ビットコードのように、argsは常にスタックに渡されます。

http://wiki.osdev.org/System_V_ABIおよびタグwikiも参照してください。

+0

参照用に使用することができますか?タイトルページにはいくつかの名前が書かれていますが、私はこれまで聞いたことがありません。 –

+0

@BulatM。はい、そのページは、標準のドキュメントの公式の現在のバージョンにリンクしています。例えば"* x86-64 psABIリビジョン252は[here](https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-r252.pdf)*からダウンロードできます。残念なことに、このドキュメントは、コンパイラが依存するすべてのものを完全には文書化していませんが、すべてが正確です。私が知っている唯一の例外は、[ゼロ/符号は32ビットに狭整数引数を拡張する](http://stackoverflow.com/questions/36706721/is-a-sign-or-zero-extension-required-when-adding -a-32bit-offset-to-a-pointer-for/36760539#36760539)。 –

+0

ABIドキュメントのコピーは、以前はhttp://www.x86-64.org/documentation.htmlに掲載されていましたが、x86-64.orgは数週間前から死んでいました。 –

関連する問題