PowerPC 内联汇编:将 C 值加载到寄存器中
PowerPC Inline Assembly: Load C Value into Register
使用 GCC
和 inline 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
从何而来?我想要指定的值 0x1337
来代替。 Here 是我看过的教程。
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)
);
使用 GCC
和 inline 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
从何而来?我想要指定的值 0x1337
来代替。 Here 是我看过的教程。
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)
);