nasmとC++へのリンクについて質問があります。litteテスト関数を次のように宣言します
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++アプリにリンクします。デバッグモードでは、すべてが正常に機能します。関数は数回呼び出され、期待どおりに機能しますが、リリースモードでは、関数は1回機能しますが、後続のプログラム操作は失敗します。スタック/フレームポインタの近く/遠くに何か問題があるように思えますが、私はこの主題にまったく慣れておらず、少し助けが必要です。前もって感謝します!a。