2010-07-16 84 views
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到屏幕?

+3

你可以写一个语法正确的问题吗? – zvrba 2010-07-16 15:08:43

+5

@zvrba:仅仅通过OP的名字来判断,OP很可能不是以英语为母语的人。当问题的含义明确时,我们不要对语法过于挑剔。 – 2010-07-16 15:15:48

+1

我已经解决了交换eax和结果地方,一切正常 – 2010-07-16 15:17:08

回答

8

我不知道,但汇编你正在做的:

mov eax,2; 
mov eax,result; 

那不是移动2到eax,然后结果到eax, 你不想要

move eax, 2; 
mov result, eax; 

9

此行是错误的:

mov eax,result; 

应该

mov result,eax; 
1
#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; 
} 
2

在用C语言编写任何汇编代码之前,用C语言中的一个小函数编写代码,并告诉编译器打印汇编列表。这将告诉你编译器如何生成汇编代码并给你一个例子。通常程序集代码显示了参数和返回值是如何传递的。

根据我的经验,汇编代码最好用汇编语言编写在单独的模块中。我很少在C中使用汇编代码,我会让编译器为我生成它。有时候,我变得执迷不悟,并将功能转换为针对特定处理器进行优化。例如,我重写了memcpy,优化为使用ARM处理器的特殊功能(在研究了编译器提供的低效版本之后)。

建议:

  • 写 组装之前,体型分析。
  • 在装配中写入 之前优化C或C++代码。
  • 不要写汇编,除非 绝对必要。
  • 在编写自己的编译器之前,从编译器生成一个汇编列表,编号为 。
  • 由于 将程序集放在单独的文件中,因此它取决于平台。
  • 请记住,重写汇编代码是 通常比调试传统的 汇编更快。