【发布时间】:2014-02-09 01:02:26
【问题描述】:
查看使用 VC++ 2003/2005 编译的 C 代码。
#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) 为什么会这样?
知道该函数需要两个 WORD 参数,我会这样做:
__asm {
MOV WORD PTR [EAX], 5
MOV WORD PTR [EBX], 6
PUSH EBX
PUSH EAX
CALL SomeFunction
}
在调试时会引发分段错误错误。
2) 为什么这不起作用?
提前致谢!
【问题讨论】:
-
“完美工作”对不同的人可能有不同的含义。
标签: c visual-c++ assembly x86 arguments