PowerPC内联汇编:将C值加载到寄存器中 [英] PowerPC Inline Assembly: Load C Value into Register

查看:130
本文介绍了PowerPC内联汇编:将C值加载到寄存器中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用GCCinline 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆