【问题标题】:Assembly in C++ [closed]C ++中的汇编[关闭]
【发布时间】:2010-07-16 15:04:14
【问题描述】:

我有以下代码。

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

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

我很了解汇编,但为什么程序不输出 2 到屏幕上?

【问题讨论】:

  • 我已经解决了exchange eax和result place,一切正常

标签: c++ visual-c++ x86 inline-assembly intel-syntax


【解决方案1】:

这一行是错误的:

 mov eax,result;

应该是

 mov result,eax;

【讨论】:

    【解决方案2】:

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

    mov eax,2;
    mov eax,result;
    

    这不是将 2 移到 eax,然后将 result 移到 eax, 你不想要

    move eax, 2;
    mov result, eax;
    

    ?

    【讨论】:

      【解决方案3】:

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

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

      建议:

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

      【讨论】:

        【解决方案4】:

        正确的语法是

        MOV Destination, Source
        

        【讨论】:

          猜你喜欢
          • 2016-12-22
          • 1970-01-01
          • 1970-01-01
          • 2012-01-24
          • 2014-06-21
          • 2013-07-02
          • 1970-01-01
          • 2015-09-29
          • 2010-10-08
          相关资源
          最近更新 更多