6

Cからアセンブリ関数にパラメータを渡したい.

UNIX ライクなシステムでは、最初の 6 つのパラメーターが rdi、rsi、rdx、rcx、r8、および r9 に入ります。

Windows では、最初の 4 つのパラメーターが rcx、rdx、r8、および r9 に入ります。

さて、私の質問は次のとおりです。BIOS または DOS プログラミング レベルでは、どのレジスタがこれらのパラメータを受け取りますか? パラメータの数が 6 を超える場合、これらのパラメータを処理するアセンブリをどのように記述すればよいですか?

4

2 に答える 2

2

あなたの質問の最初の部分を理解した場合、16 ビット モードで C を使用することは実際にはサポートされていません (16 ビット モードではセグメンテーションを使用して 16 ビットのアドレス指定を超えるため)。

2 番目の部分については、コンパイラによって異なりますが、IIRC は Windows と Unix の両方で追加の引数をスタックに渡します (引数の受け渡しの詳細については、 http://en.wikipedia.org/wiki/X86_calling_conventionsを参照してください)。

于 2013-06-27T15:15:30.393 に答える
2

64 ビット UEFI は Windows 規則を使用します。

BIOS および DOS API は、アセンブリ言語で定義されています。

従来、16 ビットおよび 32 ビットの x86 では、すべての引数がスタックに格納されていました。

于 2019-06-01T16:39:27.953 に答える