// 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 "可以吗?