jпсевдо

j

псевдо
RISC-V Ассемблер Ссылка

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