la
pseudolyszt.net tratta la e altre istruzioni RISC-V in modo più dettagliato.
Descrizione
la carica l'indirizzo di qualcosa in un registro. Quell'indirizzo è una posizione di memoria, e il valore memorizzato in quella posizione è una cosa separata. Il nome sta per load address (carica indirizzo).
Quando riservi dati in memoria, assegni loro un nome come arr o msg, il che ti evita di dover tenere traccia di numeri di indirizzo grezzi. Quel nome è un'etichetta, un sostituto leggibile per un indirizzo di memoria. La riga successiva carica l'indirizzo contrassegnato dall'etichetta arr in t0. Fornisce la posizione in cui inizia l'array e non legge il contenuto dell'array.
la t0, arr
Le istruzioni di caricamento e memorizzazione (lw, sw e le altre) prendono un indirizzo contenuto in un registro. Prima di poter leggere o scrivere dati con nome, il loro indirizzo deve essere in un registro, e la ce lo mette. La lettura del valore richiede due istruzioni. la trova dove sono i dati, e lw legge ciò che c'è.
Il manuale RISC-V descrive auipc come l'istruzione per costruire indirizzi relativi al pc. Afferma che un auipc seguito da un caricamento o una memorizzazione con un offset di 12 bit può raggiungere qualsiasi indirizzo di dati relativo al pc a 32 bit.
Un indirizzo e il suo contenuto differiscono allo stesso modo in cui differiscono un puntatore e un valore. Dopo che l'indirizzo è in un registro, raggiungi i singoli elementi aggiungendovi degli offset. L'esempio carica l'indirizzo di un pezzo di testo in a0, che è ciò che richiede il servizio di stampa di stringhe. Gli si deve dire dove si trova il testo, e legge il testo da lì. la è una pseudoistruzione che l'assembler costruisce a partire da un paio di istruzioni reali.
Si espande in
auipc rd, hi(label) addi rd, rd, lo(label)
L'assembler sostituisce questa pseudoistruzione con la o le istruzioni reali elencate sopra.
Esempio
.data msg: .string "hi" .text la a0, msg # a0 = address of msg
