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.
