Benvenuto su Inforge
Rimuovi la pubblicità e partecipa alla più grande comunità italiana sul mondo digitale presente sul web sin dal 2007.
Iscriviti

Discussione RISC V assembly

mattstack

Utente Iron
1 Aprile 2021
29
10
18
qualcuno ha una guida per risc v in italiano.Non riesco a capire come funziona l'uso dello stack.
Il funzionamento dello stack dovrebbe essere pressoché identico per tutte le architetture, quindi ti spiegherò il funzionamento di quest'ultimo sui processori della famiglia x86:
Lo stack è una zona di memoria, usata per memorizzare dati "temporaneamente", gestita in modalità LIFO(last in firts out), questo vuol dire che l'ultimo dato ad essere memorizzato in questa zona di memoria è il primo ad essere espulso, lo stack viene gestito tramite due registri puntatori, il BP(base pointer) e lo SP(stack pointer), lo SP conterrà l'offset della locazione in cui è memorizzato l'ultimo dato, mentre il BP viene utilizzato per indirizzare locazioni di memoria in questa zona, la cima dello stack è chiamata TOS(top of the stack) è corrisponde all'ultimo dato memorizzato nello stack, quindi la locazione indirizzata dallo SP, mentre, la locazione del primo dato memorizzato prende il nome di BOS(bottom of the stack).
Le due istruzioni che modificano il contenuto dello stack sono le istruzioni di "push" e "pop"(nell'architettura x86), l'istruzione "push" permette di memorizzare un dato nello stack, più precisamente all'esecuzione di questa istruzione il contenuto dello SP viene decrementato di due unità e viene memorizzato il dato(in quanto lo stack viene gestito a Word e i processori della famiglia x86 lavorano in Little Endian)
Codice:
push AX           
; Memorizza il contenuto del registro AX nello stack
push AL
; Errore in quanto AL è un registro su 8bit
Mentre l'istruzione "pop" permette di espellere una dato dallo stack memorizzando quest'ultimo in una locazione di memoria o un registro su 16bit, l'istruzione "pop" comporta la memorizzazione della Word indirizzata dallo SP nell'operando destinazione, e l'incremento di due unità di quest'ultimo.
Codice:
pop AX
; espelle una Word dallo stack e la memorizza in AX
pop AL
; errore AL è un registro a 8bi
È molto importante essere consapevole che lo stack si estende verso indirizzi bassi, quindi l'ultimo dato avrà indirizzo minore rispetto al primo, per questo un istruzione di "push", decrementa lo SP, e una di "pop" lo incrementa.
Probabilmente i processi RISC non utilizzano la memoria segmentata quindi non ti interessa con quale segmento verrà combinati lo SP per generare l'indirizzo fisico.