j
псевдоlyszt.net охоплює j та інші інструкції RISC-V більш детально.
Опис
j виконує найпростіший перехід: він завжди передає керування мітці, без жодної умови. Інструкція розгалуження передає керування лише тоді, коли порівняння успішне. Синтаксис — j label.
Це безумовний перехід, також відомий як goto. Цикли та блоки if/else покладаються на нього. Базовий цикл ставить умовне розгалуження на початку, щоб вирішити, коли вийти, виконує тіло циклу й закінчується j, який повертається до початку для наступного проходу. Без цього переходу виконання виходить за кінець, і цикл ніколи не повторюється. У if та else j в кінці блоку if пропускає блок else, тож виконується лише один із двох блоків.
j не записує адресу повернення, що відрізняє його від виклику функції. Використовуйте j для переміщення всередині коду, чи то для циклів, чи для пропуску блоку, а call використовуйте, коли виконання має повернутися. Вирішальний фактор — чи потрібне повернення.
Посібник RISC-V кодує прості безумовні переходи як jal з rd, установленим у x0. У ньому зазначено, що цей перехід завжди слід використовувати для безумовних розгалужень, а не для умовного розгалуження, умова якого завжди істинна. Переходи також відносні до pc, охоплюють значно ширший діапазон, ніж розгалуження, і не торкаються таблиць передбачення умовних розгалужень.
j — це псевдоінструкція для рядка нижче.
jal zero, label
Це перехід із збереженням адреси повернення, який записує адресу повернення в регістр zero, який її відкидає, залишаючи лише перехід. Приклад виконує перехід назад до початку циклу.
Розгортається до
jal zero, label
Асемблер замінює цю псевдоінструкцію реальною інструкцією або інструкціями, переліченими вище.
Приклад
j loop # go back to the top of the loop
Посилання
- [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.5.2, Conditional Branches, pages 31 to 32.
