我目前正在做一个关于 risc-v 的小项目。问题是,在一个函数中,当我做这样的事情时,
foo:
...
lw a3, 4(sp)
srli a2, a2, 16
srli a4, a4, 16
add a0, a2, a4
ret
执行 add a0, a2, a4 后,a2 和 a4 的值也会发生变化。例如,如果我注释掉 add 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 的基本部分,请告诉我。谢谢。