blt

blt

Asembler RISC-V Referencja

lyszt.net obejmuje blt i inne instrukcje RISC-V w większych szczegółach.

Format kodowania

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

Opis

blt porównuje dwie wartości i wykonuje skok, gdy pierwsza jest mniejsza. beq i bne sprawdzają zamiast tego równość. Nazwa oznacza branch if less than (skok, jeśli mniejsze niż). Poniższa postać skacze do oznaczonej pozycji, gdy rs1 jest mniejsze niż rs2, a w przeciwnym razie przechodzi do następnej instrukcji.

blt rs1, rs2, label

Strona beq wyjaśnia skoki, etykiety i sposób działania skoku.

Porównanie traktuje obie wartości jako ze znakiem, więc mogą być ujemne. -1 jest mniejsze niż 0, a każda liczba ujemna jest mniejsza niż każda dodatnia. Porównania bez znaku używają osobnej instrukcji, bltu, i obie różnią się dla każdej wartości, której najstarszy bit jest ustawiony.

Pętle z licznikiem opierają się na blt. Poniższy wiersz powtarza się, dopóki licznik t0 pozostaje poniżej swojego limitu t1.

blt t0, t1, loop

Gdy licznik osiągnie limit, skok nie jest wykonywany i pętla się kończy. Sprawdzanie zakresu używa tej samej instrukcji, aby utrzymać wartość poniżej maksimum, zanim program jej użyje.

Podręcznik RISC-V określa, że blt i bltu wykonują skok, gdy rs1 jest mniejsze niż rs2, porównując odpowiednio ze znakiem i bez znaku. Zauważa również, że bgt, bgtu, ble i bleu można uzyskać, odwracając operandy blt, bltu, bge i bgeu.

RISC-V nie zapewnia skoku, jeśli większe. Aby sprawdzić, czy a jest większe niż b, odwróć porównanie i sprawdź, czy b jest mniejsze niż a. Asembler oferuje skrót bgt, który sam zamienia operandy.

Przykład

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