-1

我有以下代码。

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

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

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

4

4 回答 4

9

这一行是错误的:

 mov eax,result;

应该

 mov result,eax;
于 2010-07-16T15:08:17.250 回答
8

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

mov eax,2;
mov eax,result;

这不是将 2 移到 eax,然后将结果移到 eax,你不想要吗?

move eax, 2;
mov result, eax;

?

于 2010-07-16T15:08:55.837 回答
3

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

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

建议:

  • 在编写汇编之前首选分析。
  • 在编写汇编之前优化 C 或 C++ 代码。
  • 除非绝对必要,否则不要在汇编中编写。
  • 在编写自己的程序之前从编译器生成程序集列表。
  • 将程序集放在单独的文件中,因为它依赖于平台。
  • 请记住,重写汇编代码通常比调试旧的汇编代码要快。
于 2010-07-16T16:39:16.877 回答
2

正确的语法是

MOV Destination, Source
于 2011-09-04T11:28:41.070 回答