Навигатор
Инструкции базового набора
RV32I:
арифметические
логические
сдвиги
сравнения
безусловные
переходы
системные
|
условные
переходы
загрузки
сохранения
См. также
|
|
Инструкция JAL
JAL rd, imm
Набор команд: базовый RV32I
Формат: J (иногда пишут UJ, подчеркивая общность с форматом U)
Операнды: rd – регистр, imm – 20-битная константа (со знаком!)
Действие: безусловный относительный переход: к программному счетчику PC прибавляется imm; в rd заносится адрес возврата, т.е. адрес следующей за JAL команды
Примечания
- JAL = Jump And Link; link – это формирование ссылки для возврата и продолжения выполнения программы (проще говоря, сохранение адреса следующей за JAL команды). Так обеспечивается вызов подпрограмм.
- В инструкции при занесении смещения в imm биты частично переставляются (это и отличает формат JU от U). При этом приняты следующие соглашения и правила. Самый младший нулевой бит всегда выставляется равным 0 и поэтому в команде не хранится. Биты 19-12 смещения находятся в соответствующих битах кода, так что не нуждаются в перемещении. Биты 10-1 размещены в битах 30-21 кода инструкции, что соответствует стандартному положению битов для формата I, а значит, они будут копироваться со стандартным сдвигом. Знаковый бит 20 лежит в знаковом 31-м бите кода; его придется переместить. А в бите 20 кода находится бит 11 смещения, который также придется (нестандартным образом) предварительно скопировать на свое место. Все описанное делается для упрощения аппаратной реализации.
Аналогичная перестановка битов смещения, только более простая, используется при кодировании условных переходов.
Если вам захочется разобраться в этой перестановке битов подробнее, советую посмотреть хорощий материал здесь.
- Стандарт рекомендует для возврата использовать в JAL регистр
x1 . Если формировать адрес возврата не требуется, то в качестве rd указывается x0 .
- Доступный диапазон переходов составляет ±1 Мб.
Пример
Инструкция JAL x1, 2048 прибавляет к PC указанную константу (2048 = 211, т.е. единица как раз попадает в 11-й бит). Адрес возврата помещается в x1 .
Код инструкции содержит следующие поля:
поле | разрядность | содержимое | примечание |
imm | 20 битов | 00000000000100000000 |
204810=80016 |
rd | 5 битов | 00001 | x7 |
opcode | 7 битов | 1101111 |
всегда |
Итоговый код
00000000000100000000 00001 11011112 = 00 10 00 EF16
|