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

时间:2019-11-04 06:48:42

标签: assembly riscv riscv32

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

0 个答案:

没有答案