RISC-V разница между джалом и джалром - PullRequest
2 голосов
/ 08 октября 2019

Я натолкнулся на инструкцию под названием jal и jalr, изучая язык ассемблера RISC-V.

Мне было очень трудно понять разницу между jal и jalr.

jal x1, X 

ItКажется, что приведенный выше код означает переход к X и сохранение адреса возврата, который обычно равен PC + 4, в x1.

Но после этого приходит jalr x0, 0(x1).

0(x1)означает, что возвращаясь к адресу, который является адресом возврата, но что такое x0?

По существу, x0 равно нулю в RISC-V,

, так зачем нам нужен x0?

Какова действительная разница между этими двумя инструкциями jal и jalr?

Спасибо.

1 Ответ

3 голосов
/ 08 октября 2019

Как мы видим в спецификации (стр. 15), основное различие между jal и jalr заключается в кодировке значения адреса.

jal используется немедленно (20 бит)) кодировка для адреса назначения и может прыгать + -1MiB диапазона. И сохраните фактические address + 4 в регистре rd. (x1 в вашем примере).

jalr используйте косвенный адрес (x1 в вашем примере) плюс константа 12 бит (0 в вашем примере). Он также сохраняет фактический address + 4 в регистре rd. В вашем примере ваш набор x0 в качестве адреса возврата регистрируется, потому что вам «все равно».

Когда вы, например, возвращаетесь из подпрограммы, адрес возврата не используется, тогда мы устанавливаем x0.

...