bge

bge

Asembler RISC-V Referencja

lyszt.net obejmuje bge 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

bge łączy się z blt i odwraca jego warunek. Litery oznaczają branch if greater than or equal (skok, jeśli większe lub równe). Gdy rs1 jest co najmniej równe rs2, poniższa instrukcja skacze do oznaczonej pozycji. W przeciwnym razie wykonanie kontynuowane jest od następnej instrukcji.

bge rs1, rs2, label

Dla dowolnych dwóch wartości dokładnie jedna z blt i bge wykonuje skok, więc obie obejmują wszystkie przypadki. Porównanie opisano przy blt, a skoki ogólnie przy beq.

bge często pojawia się na początku pętli jako test wyjścia. Poniższa linia opuszcza pętlę, gdy licznik t1 osiągnie swój limit t2.

bge t1, t2, done

Następnie znajduje się ciało pętli, a bezwarunkowy skok na jego końcu wraca na początek. Testowanie przed ciałem obsługuje zero powtórzeń, ponieważ ciało, którego warunek już jest spełniony, nigdy się nie wykonuje.

Część "or equal" (lub równe) decyduje o zachowaniu na granicy. bge skacze, gdy dwie wartości są równe, a błędy o jeden w pętlach zwykle wynikają z tej granicy. Pętla licząca od 0 do n kończy się, gdy licznik osiągnie n.

Zgodnie z podręcznikiem RISC-V, bge i bgeu wykonują skok, gdy rs1 jest większe lub równe rs2, porównując odpowiednio wartości ze znakiem i bez znaku. Przesunięcie skoku to wartość 12-bitowa mierzona w wielokrotnościach 2 bajtów.

Podobnie jak w przypadku blt, porównanie jest ze znakiem, więc wartości ujemne są dozwolone. bgeu to forma bez znaku, używana dla adresów i rozmiarów. Częstym zastosowaniem jest sprawdzenie, że wartość jest nieujemna, jak w poniższej linii.

bge t0, zero, ok

Przykład

bge t1, t2, done   # leave the loop once i >= n