我目前正在risc-v上做一个小项目。 问题是,在函数中,当我执行这样的操作时,
foo:
...
lw a3, 4(sp)
srli a2, a2, 16
srli a4, a4, 16
add a0, a2, 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, zero
j finish
...
finish:
addi sp, sp, 28
ret
但这返回0x00000001。如果我了解risc-v的基本部分,请告诉我。谢谢。