jpseudo

j

pseudo
Asembler RISC-V Referencja

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

Opis

j wykonuje najprostszy skok: zawsze przekazuje sterowanie do etykiety, bez żadnego warunku. Instrukcja rozgałęzienia przekazuje sterowanie tylko wtedy, gdy porównanie się powiedzie. Składnia to j label.

Jest to skok bezwarunkowy, znany również jako goto. Pętle i bloki if/else polegają na nim. Podstawowa pętla umieszcza rozgałęzienie warunkowe na początku, aby zdecydować, kiedy wyjść, wykonuje ciało pętli i kończy się j, które wraca na początek przy następnym przebiegu. Bez tego skoku wykonanie wypada poza koniec i pętla nigdy się nie powtarza. W if i else, j na końcu bloku if przeskakuje nad blokiem else, więc wykonuje się tylko jeden z dwóch bloków.

j nie zapisuje adresu powrotu, co odróżnia go od wywołania funkcji. Użyj j, aby poruszać się wewnątrz kodu, zarówno w pętlach, jak i do pominięcia bloku, a użyj call, gdy wykonanie musi wrócić. Decydującym czynnikiem jest to, czy powrót jest potrzebny.

Podręcznik RISC-V koduje zwykłe skoki bezwarunkowe jako jal z rd ustawionym na x0. Stwierdza, że ten skok powinien być zawsze używany do rozgałęzień bezwarunkowych, a nie do rozgałęzienia warunkowego, którego warunek jest zawsze prawdziwy. Skoki są również względne wobec pc, obejmują znacznie szerszy zakres niż rozgałęzienia i pozostawiają tabele predykcji rozgałęzień warunkowych nietknięte.

j to pseudoinstrukcja dla poniższej linii.

jal zero, label

Jest to skok i link, który zapisuje adres powrotu do rejestru zero, który go odrzuca, pozostawiając tylko skok. Przykład skacze z powrotem na początek pętli.

Rozwija się do

jal zero, label

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

Przykład

j loop   # go back to the top of the loop