Навигатор
Инструкции базового набора
RV32I:
арифметические
логические
сдвиги
сравнения
безусловные
переходы
системные
|
условные
переходы
загрузки
сохранения
См. также
|
|
Инструкция BEQ
BEQ rs1, rs2, offset
Набор команд: базовый RV32I
Формат: B (иногда пишут SB, подчеркивая общность с форматом S)
Операнды: rs1 и rs2 – регистры, offset – 12-битная константа (со знаком!)
Действие: сравнить значения в регистрах rs1и rs2; при равенстве выполнить переход, т.е. прибавить к адресу инструкции перехода смещение offset.
Примечания
- Общие для всех переходов правила см. здесь.
- Существует инструкция для перехода с противоположным условием – BNE.
- Доступный диапазон переходов составляет ±4 Кб. Если потребуется больше, можно применить прием, описанный в разделе "Диапазон переходов".
- Не рекомендуется использовать условные команды «со всегда истинным условием» (вроде
BEQ x0,x0,0 ) в качестве безусловного перехода, поскольку это может приводить к потерям из-за попыток предсказывать результат перехода.
Пример 1
Инструкция BEQ x6, x7, 8 сравнивает числа в x6 и x7 и в случае равенства выполняет переход, прибавляя к текущему значению счетчика смещение. Подчеркнем, что при смещении 8 (байтов) в программе будет пропущена только одна(!) 32-битная инструкция: еще 4 байта – это сама инструкция перехода.
Код инструкции содержит следующие поля:
поле | разрядность | содержимое | примечание |
offset1 | 7 битов | 0000000 |
0 |
rs2 | 5 битов | 00111 | x7 |
rs1 | 5 битов | 00110 | x6 |
func3 | 3 бита | 000 |
всегда |
offset2 | 5 битов | 01000 | 8 |
opcode | 7 битов | 1100011 |
всегда |
Примечание. Обратите внимание на тот факт, что в данном случае в старших битах смещения стоят нули и потому перестановка битов в смещении оказалась "незаметной". Но это не значит, что ее не было.
Итоговый код
0000000 00111 00110 000 01000 11000112 = 00 73 04 6316
Пример 2
Инструкция BEQ x6,x7, –4 (ее код FE 73 0E E3) аналогичным образом при равенстве регистров обеспечит переход на инструкцию, предшествующую условному переходу.
Пример 3
Имеется псевдооперация beqz rs, offset , которая заменяется инструкцией BEQ rs, x0, offset .
|