la
pseudolyszt.net obejmuje la i inne instrukcje RISC-V w większych szczegółach.
Opis
la ładuje adres czegoś do rejestru. Ten adres to lokalizacja w pamięci, a wartość przechowywana w tej lokalizacji to coś odrębnego. Nazwa oznacza load address (załaduj adres).
Gdy rezerwujesz dane w pamięci, nadajesz im nazwę taką jak arr lub msg, co oszczędza ci śledzenia surowych liczb adresowych. Ta nazwa to etykieta, czytelny zamiennik adresu pamięci. Następny wiersz ładuje adres oznaczony etykietą arr do t0. Dostarcza lokalizację, w której zaczyna się tablica, i nie odczytuje zawartości tablicy.
la t0, arr
Instrukcje ładowania i zapisu (lw, sw i pozostałe) przyjmują adres przechowywany w rejestrze. Zanim będziesz mógł odczytać lub zapisać nazwane dane, ich adres musi znajdować się w rejestrze, a la umieszcza go tam. Odczytanie wartości wymaga dwóch instrukcji. la znajduje, gdzie są dane, a lw odczytuje to, co się tam znajduje.
Podręcznik RISC-V opisuje auipc jako instrukcję do budowania adresów względnych wobec pc. Stwierdza, że auipc po którym następuje ładowanie lub zapis z 12-bitowym przesunięciem, może osiągnąć dowolny 32-bitowy adres danych względny wobec pc.
Adres i jego zawartość różnią się w taki sam sposób, w jaki różnią się wskaźnik i wartość. Gdy adres znajduje się w rejestrze, docierasz do poszczególnych elementów, dodając do niego przesunięcia. Przykład ładuje adres fragmentu tekstu do a0, czego wymaga usługa drukowania ciągu znaków. Trzeba jej powiedzieć, gdzie znajduje się tekst, a ona odczytuje tekst stamtąd. la to pseudoinstrukcja, którą asembler buduje z kilku prawdziwych instrukcji.
Rozwija się do
auipc rd, hi(label) addi rd, rd, lo(label)
Asembler zastępuje tę pseudoinstrukcję rzeczywistą instrukcją lub instrukcjami wymienionymi powyżej.
Przykład
.data msg: .string "hi" .text la a0, msg # a0 = address of msg
