gpt4 book ai didi

c - SPARC 汇编问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:05:57 26 4
gpt4 key购买 nike

我想在我的 C 程序中编写一个什么都不做的非常简单的内联汇编例程否则然后将本地寄存器 %l0 - %l7 设置为不同的值。我尝试了以下直接的方法:

asm volatile (
".text\n\t"
"mov 0, %%l0 \n\t"
"mov 1, %%l1 \n\t"
"mov 2, %%l2 \n\t"
"mov 3, %%l3 \n\t"
"mov 4, %%l4 \n\t"
"mov 5, %%l5 \n\t"
"mov 6, %%l6 \n\t"
"mov 7, %%l7 \n\t"
);

不幸的是,汇编器告诉我们:每条指令的操作数都是非法的。有人可以很好地指出我如何正确地将立即值传递给 SPARC 汇编程序吗?

非常感谢!

编辑:谢谢 Chris,我做了您建议的更改,但 Sparc 编译器仍然告诉我一些关于非法操作数的信息...

最佳答案

SPARC 不会像这样发出“立即移动”指令;有 可以像 或 %g0, 123, %l0 一样使用(或者用零寄存器设置一个不超过 11 位的常量,%g0,导致将所述常量移动到目标寄存器中),或 sethi 指令可用于设置 a 的 upper 21 位登记。为了容纳任何(32 位)常量,您必须首先对高位执行sethi 来合成两步set后跟 和较低的。

SPARC 汇编器通常知道一个set ..., %tgtregister 快捷方式来创建这个序列,和/或删除一条指令,如果常量适合的话。

另请注意,在 64 位/sparcv9 中,set 指令最终可能会计算出最多包含 5 条指令的序列,将它们一起移位/或运算。

关于c - SPARC 汇编问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5184258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com