gpt4 book ai didi

assembly - RISC-V 使用 LUI/ADDI 在寄存器中生成 -1/0xFFFFFFFF?

转载 作者:行者123 更新时间:2023-12-02 20:04:16 25 4
gpt4 key购买 nike

我正在学习如何为 RISC-V 处理器编写代码。我想将 0xFFFFFFFF 的值存储到内存/寄存器中。

我可以通过在 addi 指令之前添加 lui 来扩展它的 12 个立即位,像这样的东西:

lui t0, 0xFFFFF
addi t0, t0, 0x7FF

但结果将类似于 0xFFFFF7FF

那么,我怎样才能产生这个值呢?

最佳答案

询问 C 编译器:

unsigned foo(){return 0xFFFFFFFF;}

使用 RISC-V 的 Clang -O3 编译为此 asm (on Godbolt) :

foo():
addi a0, zero, -1
ret

(gcc 只是使用 li a0, -1 伪指令,并将细节留给汇编器。通常你应该这样做,除非你想考虑选择可以生成的常量更有效。)

<小时/>

RISC-V addi 将其立即操作数符号扩展到 32(或 64)位,因此如果您想要第 12 位为 1,则需要考虑您可以选择较高位。

在这种情况下,高位的正确起始值为 0,因此您可以完全优化 lui

RISC-V 使用 2 的补码有符号整数,因此符号扩展仅意味着在扩展时将符号位复制到所有更高的位置。

关于assembly - RISC-V 使用 LUI/ADDI 在寄存器中生成 -1/0xFFFFFFFF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57234810/

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