如何使用 asm() 将 32 位值写入寄存器 r8-r15 的低位双字? 以下代码无法编译:
#include <stdlib.h>
#include <stdio.h>
int main()
{
float f0,f1,f2=-2.4f;
asm volatile
(
"movl %2, %%r8\n"
"movl %%r8, %1\n"
"movl %1, %%r15\n"
"movl %%r15, %0"
:"=r"(f0,f1)
:"r"(f1,f2)
:"%r8,%r15"
);
printf("%f\n",f0);
system("pause");
return 0;
}
我得到的错误:
unknown register name '%r8,%r15' in 'asm'
请注意,这是一个 x64 程序,因此 r8-r15 寄存器应该可用。
最佳答案
使用 r8d 访问 r8 的低 32 位。请注意,当您写入 r8d(或 64 位模式下的任何 32 位寄存器)时,它会清除高 32 位。无法写入低 32 位并保留高 32 位。
关于c - 通过 r15 访问 r8 的低 32 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48861606/