beqzpseudo

beqz

pseudo
Asembler RISC-V Referencja

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

Opis

beqz wykonuje skok, gdy rejestr zawiera zero. Nazwa oznacza branch if equal to zero (skok, jeśli równe zero). W poniższej formie procesor skacze do oznaczonej pozycji, gdy rs wynosi zero, a w przeciwnym razie przechodzi do następnej instrukcji.

beqz rs, label

beqz to pseudoinstrukcja, czytelna nazwa, którą asembler przepisuje na rzeczywistą instrukcję. Staje się ona instrukcją poniżej, która porównuje rejestr z zero, specjalnym rejestrem, który zawsze zawiera 0.

beq rs, zero, label

beqz daje krótszy sposób zapisania najczęstszego porównania. Zobacz beq, aby dowiedzieć się, jak działają rozgałęzienia i etykiety.

Zero pojawia się często w kodzie niskopoziomowym, dlatego istnieje ten skrót. Bajt zerowy oznacza koniec tekstu. Zero to zwykle sygnał, że operacja się powiodła. Zero reprezentuje również pustą lub brakującą wartość, a pętle odliczania kończą się na zerze. Test zera jest używany po wczytaniu znaku do wykrycia końca łańcucha, na zwróconym statusie do wybrania ścieżki sukcesu oraz na liczniku do zakończenia pętli.

Podręcznik RISC-V podaje jeden powód, dla którego jego rozgałęzienia porównują dwa rejestry zamiast porównywać jeden rejestr z zerem. Porównania z zerem wymagają niebanalnego opóźnienia układu, więc są prawie tak kosztowne jak porównania wielkości arytmetycznych. Dlatego beqz to pseudoinstrukcja, która używa beq z zero.

Pierwszy wiersz poniżej czyta się jaśniej niż drugi, który wyraźnie zapisuje porównanie z zerem.

beqz t0, done
beq t0, zero, done

Pseudoinstrukcje istnieją dla czytelności, a kod maszynowy, który produkują, jest identyczny. Ich przeciwieństwem jest bnez, które wykonuje skok, gdy wartość nie jest zerem.

Rozwija się do

beq rs, zero, label

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

Przykład

li t0, 0
beqz t0, done   # t0 == 0, so jump to 'done'