PowerPC内联汇编:将C值加载到寄存器中

时间:2017-10-14 22:00:58

标签: c gcc assembly inline-assembly powerpc

使用GCCinline assembly,我想将立即加载到特定的寄存器r0。但是,我没有得到正确的结果。

unsigned short value = 0x1337;

asm volatile
(
"li 0, %0\n\t"
        "sc\n\t"
        "blr"
: /* Output registers */
:"r"(value) /* Input registers */
: /* No clobbered registers */
);

编译时,这会给出

li        r0, 9
sc
blr

9来自哪里?我想要指定的值0x1337Here是我看过的教程。

1 个答案:

答案 0 :(得分:2)

9是包含0x1337的寄存器,这正是您所要求的。注意value是如何输入寄存器的? 9,a.k.a。r9,是一个完全有效的输入寄存器。这是我得到的汇编输出。

    li 9,4919
    li 0, 9
    sc
    blr

如果您想立即加载0x1337,请改用它。

asm volatile (
    "li 0, 0x1337\n\t"
    "sc\n\t"
    "blr"
);

或者,只需使用"i"约束而不是"r"约束。

asm volatile (
    "li 0, %0\n\t"
    "sc\n\t"
    "blr"
    :
    : "i"(0x1337)
);