質問

私はNASMとC ++へのリンケージに関する質問を持っています。私は

としてリッテテスト機能を宣言します

extern "C" void __cdecl myTest( byte i1, byte i2, int stride, int *width );

と、私はこのようにそれを呼び出します:

byte i1 = 1, i2 = 2;
int stride = 3, width = 4;
myTest( i1, i2, stride, &width );
メソッドは、アセンブリのデバッグとスタックポインタが引数を取得するために使用される方法を見てするのに役立ちます。それを超えて、ポインタ引数の値がどのように作品を理解するために、7に設定されなければなりません。これは、このように実装されます:

    global _myTest

_myTest:
    mov     eax, [esp+4]     ; 1
    mov     ebx, [esp+8]     ; 2
    mov     ecx, dword [esp+16]    ; width
    mov     edx, dword [esp+12]    ; stride

    mov eax, dword [esp+16]
    mov dword [eax], 7

    ret

を経由してコンパイル
yasm -f win32 -g cv8 -m x86 -o "$(IntDir)\$(InputName).obj" "$(InputPath)"

、その後、C ++アプリにリンクされています。デバッグモードでは、すべてが正常に動作します。期待通りリリースモードで機能が一度動作しますが、その後のプログラムの開発作業が失敗するのに対し、関数は、時間と作品のカップルと呼ばれています。それは近い/遠い、スタック/フレームポインタとその何かの間違った私には思われるが、私はこの主題に非常に新たなんだと少しの助けを必要としています。前もって感謝します! ます。

役に立ちましたか?

解決

まあ、それは私がポップ/プッシュ経由ebxを維持しなければならないと思われます。

他のヒント

がある可能性がありますができます: FLAC にはNASMでコンパイルされることを意図し、アセンブラでのいくつかのソースを使用しています<。 / P>

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top