错误:错误的寄存器名称'%rax'MinGW,Windows 7,x64 CPU,C ++

在我之前的主题中:如何读取寄存器:RAX,RBX,RCX,RDX,RSP。 C或C ++中的RBP,RSI,RDI? 我询问有关阅读这些寄存器 现在我写了一个代码来阅读(就目前来说)RAX和RBX。

我使用Windows 7 64位操作系统,CodeBlocks与MinGW作为编译器和Im在x64 CPU上工作。 当我试图编译下面的代码时,我得到了这些错误:

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;
}

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

    : "%rbx", "%rax"

应该是这样的:

    : "rbx", "rax"

(哦,别问我为什么!)

编辑:您还需要使用-m64或类似编译器进行64位编译,假设您首先具有64位的MingW编译器。

链接地址: http://www.djcxy.com/p/85915.html

上一篇: Error: bad register name `%rax' MinGW, Windows 7, x64 CPU, C++

下一篇: 64 having trouble writing command line arguments, returning