blt

blt

RISC-V Ассемблер Ссылка

lyszt.net охватывает blt и другие инструкции RISC-V более подробно.

Формат кодирования

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

Описание

blt сравнивает два значения и выполняет переход, когда первое меньше. beq и bne вместо этого проверяют равенство. Название означает branch if less than (переход, если меньше). Приведённая ниже форма выполняет переход к помеченной позиции, когда rs1 меньше rs2, и в противном случае переходит к следующей инструкции.

blt rs1, rs2, label

Страница beq объясняет переходы, метки и то, как работает переход.

Сравнение рассматривает оба значения как знаковые, поэтому они могут быть отрицательными. -1 меньше 0, и любое отрицательное число меньше любого положительного. Беззнаковые сравнения используют отдельную инструкцию, bltu, и эти две расходятся для любого значения, у которого установлен старший бит.

Циклы со счётчиком полагаются на blt. Приведённая ниже строка повторяется, пока счётчик t0 остаётся меньше своего предела t1.

blt t0, t1, loop

Как только счётчик достигает предела, переход не выполняется и цикл завершается. Проверки границ используют ту же инструкцию, чтобы удерживать значение ниже максимума до того, как программа его использует.

Руководство RISC-V указывает, что blt и bltu выполняют переход, когда rs1 меньше rs2, сравнивая соответственно знаковые и беззнаковые значения. Оно также отмечает, что bgt, bgtu, ble и bleu можно синтезировать, поменяв местами операнды blt, bltu, bge и bgeu.

RISC-V не предоставляет переход, если больше. Чтобы проверить, больше ли a, чем b, поменяйте сравнение и проверьте, меньше ли b, чем a. Ассемблер предлагает сокращение bgt, которое само меняет операнды местами.

Пример

li t0, 2
li t1, 5
blt t0, t1, done   # 2 < 5, so jump to 'done'