我有以下代码。C++中的汇编程序
#include<iostream>
using namespace std;
int main() {
int result=0;
_asm {
mov eax,2
mov eax,result;
}
cout<<result<<endl;
return 0;
}
我知道汇编很好,但为什么不节目输出2到屏幕?
我有以下代码。C++中的汇编程序
#include<iostream>
using namespace std;
int main() {
int result=0;
_asm {
mov eax,2
mov eax,result;
}
cout<<result<<endl;
return 0;
}
我知道汇编很好,但为什么不节目输出2到屏幕?
我不知道,但汇编你正在做的:
mov eax,2;
mov eax,result;
那不是移动2到eax,然后结果到eax, 你不想要
move eax, 2;
mov result, eax;
?
此行是错误的:
mov eax,result;
应该
mov result,eax;
#include<iostream>
using namespace std;
int main()
{
int result=0;
//the assembly code below do the same as: result = 2;
_asm
{
mov $2,%eax
mov %eax, result
}
cout << result << endl;
//main() returns 0 to tell the operating system that
//the program executed without problems.
return 0;
}
在用C语言编写任何汇编代码之前,用C语言中的一个小函数编写代码,并告诉编译器打印汇编列表。这将告诉你编译器如何生成汇编代码并给你一个例子。通常程序集代码显示了参数和返回值是如何传递的。
根据我的经验,汇编代码最好用汇编语言编写在单独的模块中。我很少在C中使用汇编代码,我会让编译器为我生成它。有时候,我变得执迷不悟,并将功能转换为针对特定处理器进行优化。例如,我重写了memcpy
,优化为使用ARM处理器的特殊功能(在研究了编译器提供的低效版本之后)。
建议:
正确的语法是
MOV Destination, Source
你可以写一个语法正确的问题吗? – zvrba 2010-07-16 15:08:43
@zvrba:仅仅通过OP的名字来判断,OP很可能不是以英语为母语的人。当问题的含义明确时,我们不要对语法过于挑剔。 – 2010-07-16 15:15:48
我已经解决了交换eax和结果地方,一切正常 – 2010-07-16 15:17:08