В настоящее время я делаю небольшой проект на 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 также изменятся. например, если я закомментирую add a0, a2, a4 и выполню его, результат: a0 = 0x33333333, a2 = a4 = 0x00000000. Если я добавлю строку «добавить», результатом будет: 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, дайте мне знать. Благодарю.