查看這個用VC++ 2003/2005編譯的C代碼。爲什麼要將4字節參數傳遞給需要2字節參數的函數?
#include <stdio.h>
#include <windows.h>
void WINAPI SomeFunction(WORD a, WORD b)
{
printf("%d + %d = %d\n", a, b, a + b);
}
int main()
{
__asm {
MOV EAX, 5
MOV EBX, 6
PUSH EBX
PUSH EAX
CALL SomeFunction
}
return 0;
}
在此ASM代碼中,我(據我所知默認情況下)傳遞兩個DWORD
(4個字節)參數的SomeFunction()
功能需要兩個WORD
(2字節)的論點,和完美的作品(輸出5 + 6 = 11
)。
1)爲什麼這項工作?在調試它拋出一個分段錯誤
__asm {
MOV WORD PTR [EAX], 5
MOV WORD PTR [EBX], 6
PUSH EBX
PUSH EAX
CALL SomeFunction
}
:
知道該函數有兩個參數WORD
,我會做到這一點。
2)爲什麼這個不是工作?
在此先感謝!
「完美地工作」可能對不同的人有不同的含義。 –
現在就來看看吧。 – cdonts