【发布时间】:2014-01-02 03:21:44
【问题描述】:
在我之前的主题中:How to read registers: RAX, RBX, RCX, RDX, RSP. RBP, RSI, RDI in C or C++? 我询问了有关阅读这些寄存器的问题。现在我写了一个代码来读取(只是现在)RAX 和 RBX。
我正在使用带有 MinGW 作为编译器的 CodeBlocks pm 64 位 Windows 7,并且我正在使用 x86-64 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;
}
【问题讨论】:
-
你正在编译我期望的 32 位代码
标签: c++ mingw x86-64 cpu-registers