PowerPC内联汇编:将C值加载到寄存器中 [英] PowerPC Inline Assembly: Load C Value into Register
问题描述
使用GCC
和inline assembly
,我想将立即数加载到特定的寄存器r0
中.但是,我没有得到正确的结果.
Using GCC
and inline assembly
, I want to load an immediate into a specific register r0
. However, I'm not getting the right results.
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
代替. 这里是我看过的教程. >
Where does the 9
come from? I wanted the specified value 0x1337
instead. Here is a tutorial I looked at.
推荐答案
9是包含0x1337
的寄存器,这正是您要的内容.注意value
是输入寄存器吗? 9,又名r9,是一个完全有效的输入寄存器.这是我得到的程序集输出.
9 is the register containing 0x1337
, which is exactly what you asked for. Notice how value
is an input register? 9, a.k.a. r9, is a perfectly valid input register. This is the assembly output I get.
li 9,4919
li 0, 9
sc
blr
如果您想立即加载0x1337,只需使用它即可.
If you want to load 0x1337 as an immediate, just use that instead.
asm volatile (
"li 0, 0x1337\n\t"
"sc\n\t"
"blr"
);
或者,只需使用"i"
约束而不是"r"
约束.
Or, just use the "i"
constraint instead of the "r"
constraint.
asm volatile (
"li 0, %0\n\t"
"sc\n\t"
"blr"
:
: "i"(0x1337)
);
这篇关于PowerPC内联汇编:将C值加载到寄存器中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!