j
pseudolyszt.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
Odwołania
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.5.1, Unconditional Jumps, page 30.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.5.2, Conditional Branches, pages 31 to 32.
