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

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

在我之前的主题:如何读取寄存器:rax、rbx、rcx、rdx、rsp。C、C++中的RBP、RSI、RDI?我问起了读那些登记簿的事。现在我写了一个代码来读取(目前为止)rax和rbx。

我使用Windows7 64位操作系统,代码块和Mingw作为编译器,我在X64 CPU上工作。当我试图编译以下代码时,我得到了这些错误:

1
2
Error: bad register name `%rax'  
Error: bad register name `%rbx'

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#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;
"

        /* read value from rax into rax*/
       "movq %%rax, %1;
"

        /* output args */
        :"=r" (rbx),"=r" (rax)
        : /* no input */
        /* clear both rdx and rax */
        :"%rbx","%rax"
    );

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

}

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

    return 0;
}


我怀疑你的错误来自于"clobber"行:

1
    :"%rbx","%rax"

应该是:

1
    :"rbx","rax"

(哦,别问我为什么!)

编辑:您还需要编译64位,使用-m64或类似的工具-当然,假设您拥有的mingw编译器首先支持64位。