查看这个用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