0

私は現在、C /C++でいくつかのASMを使用することに取り組んでいます

私は以下を持っています

__declspec(naked) unsigned long 
someFunction( unsigned long inputDWord )
{
    __asm
    {
    }
}

asmで、unsigned longをどのように返しますか?

何かをスタックにプッシュしてからretを呼び出す必要がありますか?私は長い間Asmを使用したことがなく、これまでC++内で使用したことはありません。

ありがとう!

4

1 に答える 1

3

編集: @Matteo Italia のおかげで、の使用法を修正しましたret

retval をeax登録します。これは規則に従ってい__cdeclます__stdcall

次に、呼び出し規約に応じて、適切なret命令のバリアントを使用する必要があります。

  • __cdecl慣例(または類似)の場合- を使用しますret。マシンレベルでは、これはpop、スタックからの戻りアドレスとスタックへの戻りアドレスを-ingすることを意味jmpします。呼び出し元は、スタックからすべての関数パラメーターを削除する責任があります。
  • __stdcall慣例(または類似)の場合- を使用ret Xしますが、Xはすべての関数引数のサイズです。
于 2012-11-18T23:11:31.900 に答える