内联汇编崩溃了吗?

时间:2011-09-09 18:15:28

标签: visual-c++ assembly inline-assembly

我在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
   }
}

除了我的应用程序中的那些行,我什么都没有,结果:字符串没有打印,应用程序崩溃。任何想法为什么会这样?

2 个答案:

答案 0 :(得分:1)

Project + Properties,C / C ++,Code Generation,select / MTd。重复发布配置,选择/ MT。

如果您想使其与CRT的非静态版本一起使用,那么您需要像这样编写调用:

  call dword ptr printf

需要间接调用DLL的导出。

答案 1 :(得分:0)

我假设弹出ebx是原因。除eax外,您有责任维护所有寄存器的完整性。请尝试弹出eax