1

我目前正在做一个关于 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 的基本部分,请告诉我。谢谢。

4

0 回答 0