jrpseudo

jr

pseudo
Asembler RISC-V Referencja

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

Opis

jr skacze pod adres przechowywany w rejestrze. Nazwa oznacza jump register (skok do rejestru). j skacze pod stałą etykietę zapisaną w kodzie. jr skacze pod dowolny adres, który przechowuje rejestr, wyznaczony przez program w trakcie działania. Nie zapisuje adresu powrotu.

jr to pseudoinstrukcja dla poniższej linii, skoku rejestrowego, który odrzuca adres powrotu (zobacz jalr).

jalr zero, rs, 0

Tablica skoków to tablica w pamięci przechowująca adresy kilku procedur, a jr jest z nią używane. Aby wybrać procedurę numer i, program oblicza jej miejsce w tablicy, ładuje przechowywany tam adres do rejestru i używa jr, aby pod niego skoczyć. Jedno wyszukanie i jeden skok zastępują długi ciąg porównań (czy to przypadek 0, przypadek 1, przypadek 2 i tak dalej), niezależnie od liczby przypadków. Gęste instrukcje switch i wewnętrzna pętla interpretera działają w ten sposób.

Podręcznik RISC-V koduje zwykłe bezwarunkowe skoki pośrednie jako jalr z rd ustawionym na x0. Zauważa, że jalr nie traktuje swojego argumentu natychmiastowego jako wielokrotności 2 bajtów, w przeciwieństwie do rozgałęzień warunkowych, oraz że większość użyć jalr ma zerowy argument natychmiastowy lub występuje po lui albo auipc.

Powrót z funkcji to skok pod adres w ra, więc ret to jr ra pod inną nazwą. Grupa instrukcji skoku różni się tym, skąd pochodzi adres i czy zapisywany jest adres powrotu.

Rozwija się do

jalr zero, rs, 0

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

Przykład

la t0, target
jr t0            # jump to the address held in t0