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

恶霸Wii广场

使用GCCand 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是我看过的教程。

迪特里希·埃普

9 是包含 的寄存器0x1337,这正是您所要求的。注意value输入寄存器如何9,又名 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)
);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

内联汇编:将imm移至没有符号扩展的64位寄存器

将32位值加载到手臂组件中的寄存器中

组装中的PowerPC GCC打印寄存器不带%符号

如何了解PowerPC stwbrx的GNU C内联汇编宏

将地址中的值加载到寄存器中

如何在PowerPC中使用内联汇编获取cpuid?

如何将常数值加载到浮点寄存器st0中?

C ++内联汇编试图将字符从字符串复制到寄存器中

如何将功能或标签的地址加载到寄存器中

将向量以不匹配的大小加载到AVX2寄存器中

使用GAS将标签中的单个字节加载到arm64中的寄存器中

C ++中的扩展内联汇编:是否有必要保留易失性寄存器?

如何在扩展的GCC内联汇编中将输入操作数(C寄存器变量)标记为混乱的输入?

powerpc-gcc将很长的数据类型变量编译为浮动寄存器

C内联ASM:将整数传递到寄存器

C ++中功能钩子:获取寄存器值并跳回[Windows上的x86汇编]

C中的内联汇编无法正常工作

将“ / bin / sh”加载到寄存器中

如何使用C的内联汇编器访问ARM Cortex M3的r11寄存器

如何解决 C 中内联汇编中的错误:'在重新加载'asm'时找不到类'GENERAL_REGS'中的寄存器'

C中的AVR - 将寄存器的值存储在变量中

我们如何在 c 中检查内联汇编中的寄存器值?

AVR 汇编:将一个 16 位数字加载到两个 8 位寄存器中

汇编中的内联 C++ 方法

将移位的立即数加载到寄存器中的单条指令?

(汇编)尝试将数据加载到不适合它的寄存器中的行为?

使用 gcc 和宏将 ARMv7-M 汇编代码内联到 c 中

C中的内联汇编

如何将 .word 符号加载到 Arm 程序集中的寄存器中?