blt

blt

Ensamblador RISC-V Referencia

lyszt.net cubre blt y otras instrucciones RISC-V con más detalle.

Formato de codificación

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

Descripción

blt compara dos valores y salta cuando el primero es menor. beq y bne comprueban la igualdad en su lugar. El nombre significa branch if less than (salta si es menor que). La forma siguiente salta a la posición etiquetada cuando rs1 es menor que rs2, y en caso contrario continúa con la siguiente instrucción.

blt rs1, rs2, label

La página de beq explica los saltos, las etiquetas y cómo funciona un salto.

La comparación trata ambos valores como con signo, por lo que pueden ser negativos. -1 es menor que 0, y cualquier número negativo es menor que cualquier número positivo. Las comparaciones sin signo usan una instrucción aparte, bltu, y ambas discrepan en cualquier valor cuyo bit más significativo esté activado.

Los bucles de conteo dependen de blt. La línea siguiente se repite mientras el contador t0 permanezca por debajo de su límite t1.

blt t0, t1, loop

Una vez que el contador alcanza el límite, el salto no se toma y el bucle termina. Las comprobaciones de límites usan la misma instrucción para mantener un valor por debajo de un máximo antes de que el programa lo use.

El manual de RISC-V especifica que blt y bltu toman el salto cuando rs1 es menor que rs2, comparando con signo y sin signo respectivamente. También señala que bgt, bgtu, ble y bleu pueden sintetizarse invirtiendo los operandos de blt, bltu, bge y bgeu.

RISC-V no proporciona un salto si es mayor. Para comprobar si a es mayor que b, invierte la comparación y comprueba si b es menor que a. El ensamblador ofrece una forma abreviada bgt que intercambia los operandos por ti.

Ejemplo

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