C - 读取和设置汇编寄存器

Tha*_*rry 2 c assembly gcc cpu-registers

我需要能够从我的 C 代码访问汇编寄存器。我有一种简单的方法可以将寄存器的值设置为变量的值并将寄存器的值作为变量获取?希望这是有道理的......

Mat*_*hew 5

如果您使用的是VC(微软的C编译器)

int regVal;
__asm {
  mov [regVal], eax
}
Run Code Online (Sandbox Code Playgroud)

这将加载任何eax持有的东西regVal

如果您使用的是海湾合作委员会:

int regVal;
asm("movl %%eax, %0" : "=r"(regVal) :);
Run Code Online (Sandbox Code Playgroud)

希望我做对了,我实际上并没有在 GCC 中进行内联汇编。

  • @Matthew:在不告诉编译器的情况下写入“%eax”将继续编译器使用 EAX 的任何用途。您需要在 `eax` 上声明一个 clobber,或者使用 `asm volatile("" : : "a"(regVal));` 让编译器为您将 `regVal` 放入 EAX 中。 (2认同)