RISC-V:使用a0进行操作会更改其他寄存器值

我目前正在risc-v上做一个小项目。 问题是,在函数中,当我执行这样的操作时,

foo:
    ... 
    lw a3,4(sp) 
    srli a2,a2,16 
    srli a4,a4,16
    add a0,a4 
    ret

在执行加法a0,a2,a4之后,a2和a4的值也会改变。 例如 如果我注释掉加法a0,a2,a4并执行它,则结果为:a0 = 0x33333333,a2 = a4 = 0x00000000。 如果添加“ add”行,结果将变为: a0 = ax000063e3,a3 = 0x123392c8,a4 = 0x00000d6e,a2 = 0x00005675。

即使这是该函数的最后一条语句,它也会更改该函数上方的寄存器的值。 (如a3)

我是否缺少有关risc-v的信息?不是顺序执行吗?

还在函数中使结果变为0,

...
beq a1,zero,exit_loop
...

exit_loop:
add a0,zero
j finish

...
finish:
addi sp,sp,28
ret 

但这返回0x00000001。如果我了解risc-v的基本部分,请告诉我。谢谢。

bzl111 回答:RISC-V:使用a0进行操作会更改其他寄存器值

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3168654.html

大家都在问