我在visual c ++ 2010 Ultimate(Windows 7 Professional)中使用内联汇编时遇到问题。当我使用字符,DWORD字符串等时,我的所有内联汇编都不起作用......所以我在我的控制台应用程序中从MSDN复制了这段代码:
// InlineAssembler_Calling_C_Functions_in_Inline_Assembly.cpp
// processor: x86
#include <stdio.h>
char format[] = "%s %s\n";
char hello[] = "Hello";
char world[] = "world";
int main( void )
{
__asm
{
mov eax, offset world
push eax
mov eax, offset hello
push eax
mov eax, offset format
push eax
call printf
//clean up the stack so that main can exit cleanly
//use the unused register ebx to do the cleanup
pop ebx
pop ebx
pop ebx
}
}
除了我的应用程序中的那些行,我什么都没有,结果:字符串没有打印,应用程序崩溃。任何想法为什么会这样?
答案 0 :(得分:1)
Project + Properties,C / C ++,Code Generation,select / MTd。重复发布配置,选择/ MT。
如果您想使其与CRT的非静态版本一起使用,那么您需要像这样编写调用:
call dword ptr printf
需要间接调用DLL的导出。
答案 1 :(得分:0)
我假设弹出ebx是原因。除eax
外,您有责任维护所有寄存器的完整性。请尝试弹出eax
。