bgezpseudo

bgez

pseudo
Asembler RISC-V Referencja

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

Opis

bgez wykonuje skok, gdy wartość w rejestrze jest zerem lub liczbą dodatnią. Nazwa oznacza branch if greater than or equal to zero (skok, jeśli większe lub równe zero). Poniższa forma skacze do oznaczonej pozycji, gdy rs jest co najmniej zerem, a w przeciwnym razie przechodzi do następnej instrukcji.

bgez rs, label

Asembler traktuje ją jako pseudoinstrukcję i przepisuje ją na poniższą instrukcję, która porównuje rejestr z zero, rejestrem, który zawsze przechowuje 0.

bge rs, zero, label

Porównanie jest ze znakiem, więc 32 bity w rejestrze są odczytywane jako liczba, która może być ujemna. Zero liczy się jako dopasowanie, co odróżnia bgez od bgtz. Jest to przeciwieństwo bltz, więc dla dowolnej wartości dokładnie jedna z tych dwóch wykonuje skok. Porównanie dwóch rejestrów opisano w bge.

bgez to naturalny test dla wartości, która nie może być ujemna, takiej jak długość, liczba lub indeks. Program, który odejmuje jeden od licznika i kontynuuje pętlę, dopóki licznik nie spadnie poniżej zera, używa go na końcu pętli.

addi t0, t0, -1
bgez t0, loop

Powyższa pętla powtarza się, dopóki t0 jest równe 0 lub większe po odjęciu, więc wykonuje się jeszcze raz z t0 równym 0 i zatrzymuje się, gdy t0 osiągnie -1.

Rozwija się do

bge rs, zero, label

Asembler zastępuje tę pseudoinstrukcję rzeczywistą instrukcją lub instrukcjami wymienionymi powyżej.

Przykład

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