blt

blt

Assembly RISC-V Riferimento

lyszt.net tratta blt e altre istruzioni RISC-V in modo più dettagliato.

Formato di codifica

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

Descrizione

blt confronta due valori e salta quando il primo è minore. beq e bne verificano invece l'uguaglianza. Il nome sta per branch if less than (salta se minore di). La forma seguente salta alla posizione etichettata quando rs1 è minore di rs2, e altrimenti prosegue con l'istruzione successiva.

blt rs1, rs2, label

La pagina beq spiega i salti, le etichette e come funziona un salto.

Il confronto tratta entrambi i valori come con segno, quindi possono essere negativi. -1 è minore di 0, e qualsiasi numero negativo è minore di qualsiasi numero positivo. I confronti senza segno usano un'istruzione separata, bltu, e le due discordano su qualsiasi valore il cui bit più significativo sia impostato.

I cicli di conteggio si basano su blt. La riga seguente si ripete finché il contatore t0 resta sotto il suo limite t1.

blt t0, t1, loop

Una volta che il contatore raggiunge il limite, il salto non viene preso e il ciclo termina. I controlli dei limiti usano la stessa istruzione per mantenere un valore sotto un massimo prima che il programma lo utilizzi.

Il manuale RISC-V specifica che blt e bltu prendono il salto quando rs1 è minore di rs2, confrontando rispettivamente con segno e senza segno. Osserva inoltre che bgt, bgtu, ble e bleu possono essere sintetizzati invertendo gli operandi di blt, bltu, bge e bgeu.

RISC-V non fornisce un salto se maggiore. Per verificare se a è maggiore di b, inverti il confronto e verifica se b è minore di a. L'assembler offre una scorciatoia bgt che scambia gli operandi per te.

Esempio

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