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位。