C ++中的汇编程序

时间:2010-07-16 15:04:14

标签: c++

我有以下代码。

#include<iostream>
using namespace std;
int main() {
    int result=0;
    _asm {
         mov eax,2
         mov eax,result;
    }

    cout<<result<<endl;
    return 0;
}

我知道汇编程序很好,但为什么程序不输出2到屏幕?

5 个答案:

答案 0 :(得分:9)

这一行错了:

 mov eax,result;

应该是

 mov result,eax;

答案 1 :(得分:8)

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

mov eax,2;
mov eax,result;

是不是将2移动到eax,然后导致eax, 你不想要

move eax, 2;
mov result, eax;

答案 2 :(得分:2)

在用C编写任何汇编代码之前,将代码写入C中的一个小函数中,并告诉编译器打印汇编列表。这将告诉您编译器如何生成汇编代码并为您提供一个示例。通常,汇编代码显示了如何传递参数和返回值。

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

建议:

  • 在写作之前更喜欢分析 组件。
  • 之前优化C或C ++代码 写作大会。
  • 除非是,否则不要在汇编中书写 绝对必要。
  • 从中生成装配清单 编写自己的编译器。
  • 将程序集放在单独的文件中 它取决于平台。
  • 请记住,重写汇编代码是 通常比调试遗产更快 组件。

答案 3 :(得分: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;  
}

答案 4 :(得分:1)

正确的语法是

MOV Destination, Source