芯来科技
直播中

LL-LING宁

8年用户 1237经验值
擅长:电源/新能源
私信 关注
[问答]

关于NICE扩展指令集内联汇编问题咨询

请问一下这个地方,我希望指令中的rs1和rs2是我通过函数入口给的立即数,而不是A和B的寄存器地址,应该如何修改?

回帖(1)

费加罗

2024-1-11 09:54:15
要修改NICE扩展指令集内联汇编中的rs1和rs2为给定的立即数而不是寄存器地址,可以使用`li`指令将立即数加载到一个寄存器中,然后在后续指令中使用这个寄存器作为rs1和rs2。

以下是一个示例代码片段:

```c
int add_int(int a, int b) {
    int result;
    asm ("li t0, %[a]nt"
         "li t1, %[b]nt"
         "add %[result], t0, t1"
         : [result] "=r" (result)
         : [a] "i" (a), [b] "i" (b)
         : "t0", "t1"
    );
    return result;
}
```

在这个示例中,使用`li`指令将立即数`a`和`b`分别加载到`t0`和`t1`寄存器中,然后使用这两个寄存器进行加法运算,将结果存储到`result`变量中。

请注意,`[a] "i" (a)`和`[b] "i" (b)`在内联汇编中分别表示将`a`和`b`作为立即数使用,而不是寄存器地址。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分