別の関数からアセンブリ関数を呼び出すときに、どのレジスタを保存する必要がありますか (8086)
例: アーム アセンブリ コーディングでは、r4-r12 レジスタを保存しています。
BX、CX、DX、SI、DI も保存する必要があります @Multimedia Mike
使用するレジスタを保存し、関数の外部からではなく、関数内で保存する必要があります。8086 ランドでは、BP レジスタを保存し、それを使用してスタックにプッシュされたパラメータを参照し、終了時に BP レジスタを復元するのが通例です。また、値を返す必要がある場合は、慣例により AX レジスタを使用します。
更新:更新された質問への回答として、ASM 関数がそれらを使用する場合は、それらのレジスタを保存する必要があります。これを手動で管理したくない場合は、すべての x86 レジスタをプッシュ/ポップする pusha/popa をいつでも使用できます。
[e]ax、[e]cx、[e]dx は呼び出し元保存レジスタ、[e]bx、[e]si、[e]di、[e]bp は呼び出し先保存レジスタです。つまり、どの関数も eax を破棄できます。 、ecx および edx。
また、8086 ランドでは、dx:ax ペアで「構造体」または 32 ビット値を返すのが通例です。