jalr
lyszt.net охоплює jalr та інші інструкції RISC-V більш детально.
Формат кодування
Опис
jalr належить до того самого сімейства, що й jal, де r означає регістр. Обидві інструкції виконують перехід і зберігають адресу повернення, як описано на сторінці jal. Різниця полягає в цілі переходу. jal виконує перехід на мітку, зафіксовану під час написання програми, тоді як jalr виконує перехід на адресу, що зберігається в регістрі, що дозволяє обчислювати призначення під час виконання.
Саме це дозволяє функції повертатися. Викликач поміщає адресу повернення в регістр ra, а функція повертається, використовуючи jalr для досягнення адреси в ra. Інструкція ret — це jalr на ra.
Та сама можливість застосовується щоразу, коли призначення заздалегідь невідоме. Вона охоплює виклики функції, адресу якої було передано, і вибір серед процедур, перелічених у таблиці адрес, — саме так реалізується великий оператор switch або диспетчеризація інтерпретатора.
Згідно з посібником RISC-V, jalr додає знаково-розширений 12-бітний immediate до регістра rs1, потім очищає найменш значущий біт результату. Він зберігає адресу наступної інструкції, pc плюс 4, у rd, і x0 може слугувати призначенням, коли адреса повернення не потрібна. lui, за яким іде jalr, досягає будь-якої 32-бітної абсолютної адреси, а auipc, за яким іде jalr, досягає будь-якої 32-бітної адреси відносно pc. Обидві інструкції переходу викликають виняток, якщо цільова адреса не вирівняна за межею чотирьох байтів.
Формат jalr наведено нижче. Він виконує перехід на адресу в регістрі rs плюс необов'язкове невелике зміщення та зберігає адресу повернення в rd.
jalr rd, rs, offset
Як і у випадку з jal, регістр, у який він записує, перезаписується, тому потрібна та сама обережність щодо збереження ra.
Приклад
la t0, target jalr ra, t0, 0 # jump to target; ra holds the return address
Посилання
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.5.1, Unconditional Jumps, page 30.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.1, Integer Register-Immediate Instructions, pages 28 to 29.
