lapseudo

la

pseudo
Assembly RISC-V Riferimento

lyszt.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