bgezPseudoelement

bgez

Pseudoelement
RISC-V Assembler Referenz

lyszt.net behandelt bgez und andere RISC-V-Befehle ausführlicher.

Beschreibung

bgez führt einen Sprung aus, wenn der Wert in einem Register null oder positiv ist. Der Name bedeutet „branch if greater than or equal to zero“. Die folgende Form springt zur beschrifteten Position, wenn rs mindestens null ist, und fällt andernfalls zur nächsten Anweisung durch.

bgez rs, label

Der Assembler behandelt sie als Pseudo-Anweisung und schreibt sie in die folgende Anweisung um, die das Register mit zero vergleicht, dem Register, das immer 0 enthält.

bge rs, zero, label

Der Vergleich ist vorzeichenbehaftet, sodass die 32 Bits im Register als eine Zahl gelesen werden, die negativ sein kann. Null zählt als Übereinstimmung, was bgez von bgtz unterscheidet. Es ist das Gegenteil von bltz, sodass für jeden Wert genau eines der beiden den Sprung ausführt. Siehe bge für den Vergleich zweier Register.

bgez ist der natürliche Test für einen Wert, der nicht negativ sein darf, wie eine Länge, ein Zähler oder ein Index. Ein Programm, das eins von einem Zähler subtrahiert und in einer Schleife bleibt, solange der Zähler nicht unter null gefallen ist, verwendet es am Ende der Schleife.

addi t0, t0, -1
bgez t0, loop

Die obige Schleife wiederholt sich, solange t0 nach der Subtraktion 0 oder mehr ist, sodass sie einmal mehr mit t0 gleich 0 läuft und stoppt, wenn t0 -1 erreicht.

Wird erweitert zu

bge rs, zero, label

Der Assembler ersetzt diese Pseudoanweisung durch die oben aufgeführte(n) echte(n) Anweisung(en).

Beispiel

li t0, 4
bgez t0, done   # t0 >= 0, so jump to 'done'