我正在用VC編譯器編譯這個C++代碼。我試圖調用一個函數使用__asm
語句,這樣,它有兩個WORD
(又名unsigned short
)參數:如何在__asm中使用變量?
__declspec(naked) void __stdcall CallFunction(WORD a, WORD b)
{
__asm {
PUSH EBP
MOV EBP, ESP
PUSH a
PUSH b
CALL functionAddress
LEAVE
RETN
}
}
在functionAddress
功能只是輸出做a + b
的結果。然後打電話CallFuncion(5, 5);
打印「64351」或類似的東西。使用a
和b
變量時__asm
語句內,因爲這個作品的問題是:
PUSH EBP
MOV EBP, ESP
PUSH 5
PUSH 5
CALL functionAddress
LEAVE
這是在functionAddress
功能:
void __stdcall Add(WORD a, WORD b)
{
WORD c;
c = a + b;
printf("The result is %d\n", c);
}
我怎樣才能做到這一點的正確方法?因此__asm
聲明解釋了a
和b
值?
「VC編譯器」出現了很多版本。請對你的環境做更詳細和具體的說明。 –
你說它再次調用'CallFunction',這是無限遞歸,請更清楚。 – 2014-01-16 17:24:31
這是VC 2005編譯器,如果我沒有錯。 @ user9000對不起,我在函數的後面調用函數。 – cdonts