bltzpseudo

bltz

pseudo
Asembler RISC-V Referencja

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

Opis

bltz wykonuje rozgałęzienie, gdy rejestr zawiera liczbę ujemną. Nazwa oznacza branch if less than zero (rozgałęzienie, jeśli mniejsze od zera). Poniższa forma skacze do oznaczonej pozycji, jeśli rs jest mniejsze od zera, a w przeciwnym razie przechodzi do następnej instrukcji.

bltz rs, label

Asembler przepisuje tę pseudoinstrukcję na rzeczywistą instrukcję. Staje się ona poniższą instrukcją, która porównuje rejestr z zero, rejestrem, który zawsze zawiera 0.

blt rs, zero, label

Porównanie jest ze znakiem, więc 32 bity w rejestrze są odczytywane jako liczba, która może być ujemna. Rozgałęzienie porównuje dwa rejestry i nie może przyjąć stałej zapisanej w instrukcji, dlatego 0 pochodzi z rejestru zero. Zobacz blt dla rozgałęzień porównujących dwie wartości oraz beq, aby dowiedzieć się, jak działają etykiety.

Aby sprawdzić, czy wartość jest mniejsza od zera, umieść wartość w rejestrze i użyj na niej bltz. Typowe przypadki to testowanie wyniku odejmowania, czy spadł poniżej zera, oraz testowanie wyniku funkcji, która zgłasza błąd jako liczbę ujemną.

sub t0, t1, t2
bltz t0, smaller

Powyższe wiersze skaczą do smaller, gdy wynik odejmowania jest mniejszy od zera. Wynik dokładnie 0 nie jest ujemny i przechodzi do następnej instrukcji. Przeciwne rozgałęzienie, które również przyjmuje zero, to bgez.

Rozwija się do

blt rs, zero, label

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

Przykład

li t0, -3
bltz t0, done   # t0 < 0, so jump to 'done'