当前位置: 代码迷 >> 汇编语言 >> 在VC8的中使用内嵌汇编 试了一下来自MSDN的一个例子 运行时出错 为什么 其它的例子还行,该怎么处理
  详细解决方案

在VC8的中使用内嵌汇编 试了一下来自MSDN的一个例子 运行时出错 为什么 其它的例子还行,该怎么处理

热度:6929   发布时间:2013-02-26 00:00:00.0
在VC8的中使用内嵌汇编 试了一下来自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
      }
}

------解决方案--------------------------------------------------------
_asm mov eax, offset world
_asm push eax
_asm mov eax, offset hello
_asm push eax
_asm mov eax, offset format
_asm push eax
call printf
//clean up the stack so that main can exit cleanly
//use the unused register ebx to do the cleanup
_asm pop ebx
_asm pop ebx
_asm pop ebx
------解决方案--------------------------------------------------------
调试下看看 call printf 指令处是什么问题?
------解决方案--------------------------------------------------------
运行了下,没发现问题
------解决方案--------------------------------------------------------
call printf语句的问题,更详细的说是调用printf函数的问题,去掉这一句肯定没问题。

在高级语言中嵌入汇编时,因为具体编译器的具体实现方式是不同的,所以对嵌入汇编中的函数调用的支持程度,乃是语法规则也不尽相同。所以,建议在明确知道编译器是否支持嵌入汇编函数调用和调用语法规则时在调用函数,否则就不要调用。但尽量还是不要在嵌入汇编中调用函数,以使得源代码具有对多个编译器的最大支持,增加源代码的通用性。
------解决方案--------------------------------------------------------
那肯定是没有包含一些头文件或者是没有定义一些宏引起的。
------解决方案--------------------------------------------------------
你试着把char format[] = "%s %s\n ";改为 "%s4 %s4\n "可以吗?
  相关解决方案