RISC-V: работа с a0 изменяет другие значения регистра - PullRequest
0 голосов
/ 04 ноября 2019

В настоящее время я делаю небольшой проект на 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, дайте мне знать. Благодарю.

...