如何使用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/

10-11 15:32