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'