当前位置: 首页 > 知识库问答 >
问题:

“错误:在64位Windows 7上使用MinGW编译时,错误的寄存器名'%RAX'”

梁丘赞
2023-03-14
Error: bad register name `%rax'
Error: bad register name `%rbx'
#include <iostream>
#include <cstdlib>
#include <stdint.h>

void read(void)
{
    uint64_t rax = 0, rbx = 0;
    __asm__ __volatile__ (
        /* read value from rbx into rbx */
        "movq %%rbx, %0;\n"
        /* read value from rax into rax*/
        "movq %%rax, %1;\n"
        /* output args */
        : "=r" (rbx), "=r" (rax)
        : /* no input */
        /* clear both rdx and rax */
        : "%rbx", "%rax"
    );

    /* print out registers content */
    std::cout << "RAX = " << rax << "\n";
    std::cout << "RBX = " << rbx << "\n";

}

int main(int argc, char **argv)
{
    read();

    return 0;
}

共有1个答案

舒斯伯
2023-03-14

我怀疑你的错误来自“clobber”一行:

    : "%rbx", "%rax"

应改为:

    : "rbx", "rax"

(哦,别问我为什么!)

 类似资料:
  • 从Eclipse运行install时,我们没有问题,因为编译器版本设置为1.8。 在终端上运行mvn安装时,我们得到以下错误。 当使用mvn install-X时,我们看到目标1.5 然而,这里是我的java和javac版本 我似乎从我运行的每个版本中,我们应该有1.8的合规性,但maven目标继续尝试安装1.5的合规性。

  • 从事maven项目。我试图使用maven进行构建,但我遇到了以下错误!我正在使用JDK 8开发eclipse。 无法执行目标org.apache.maven.plugins:maven-compiler-plugin:2.3.2:编译(默认编译) 我也尝试了上面的解决方案,但我仍然得到错误!

  • 我试着运行一个thrift网站上提供的thrift服务器和客户端程序,我得到了以下错误。谁能帮我解决这些错误吗。编码可以在以下位置找到:https://thrift.apache.org/tutorial/java

  • 问题内容: 我有用32位汇编语言编写的程序…现在,我无法在64位OS上对其进行编译。在我们学校,它们是特定的,程序必须以32位版本编写。这是我的程序: 任何的想法?我尝试了很多方法来编译它。编译后输出错误: 输出: 问题答案: 首先将更改为并将符号更改为,然后使用链接目标文件,该文件将自动链接至该文件, 您需要这样做,因为AFAIK如果没有,就无法链接至libc。另外,在汇编时也应使用elf32而

  • 我试图从spark 1.6迁移到2.0,但仅在2.0上编译时出现以下错误: 无法找到存储在数据集中的类型的编码器。导入支持原始类型(Int、String等)和产品类型(case类)spark.implicits._将在未来版本中添加对序列化其他类型的支持。val subGroupCount: Array[Seq[any]]=columns.map(c= 问候

  • 问题内容: 使用 应该以32位版本编译该文件。 不幸的是我得到这个错误: 我该如何解决? 如果我不使用它,则使用64位指令。 问题答案: 要在64位Linux版本上编译32位二进制文​​件,您必须安装开发包和32位GNU C库 尝试这个 和