Nell'assembly MIPS , esiste un registro per il puntatore dello stack e un altro registro per il puntatore del frame. Qual è il frammento di frame e qual è il suo scopo. In che cosa differisce dal puntatore dello stack?
Nell'assembly MIPS , esiste un registro per il puntatore dello stack e un altro registro per il puntatore del frame. Qual è il frammento di frame e qual è il suo scopo. In che cosa differisce dal puntatore dello stack?
Nell'assembly MIPS, il puntatore dello stack punta in cima allo stack. Mentre assegni lo spazio nello stack, il puntatore dello stack ($ sp) si sposta per puntare alla memoria libera.
Quando si chiama una subroutine nell'assembly MIPS (i registri erano un premio in quei giorni - i parametri basati sul registro erano non convenzionali), uno scrive i parametri nello stack e poi avanza il puntatore dello stack.
Quando il metodo inizia, un parametro può essere a un offset di 16($sp)
. Tuttavia, quando le variabili vengono posizionate nello stack, il puntatore dello stack si sposta e lo stesso parametro può ora trovarsi al posto di 24($sp)
. Questo può rendere il codice un po 'confuso.
Il puntatore del frame ($ fp) punta all'inizio del frame dello stack e non si sposta per la durata della chiamata di subroutine. Questo punta alla base del frame dello stack e i parametri che vengono passati alla subroutine rimangono in una posizione costante rispetto al puntatore del frame.
Comprendi che il puntatore del frame dovrà essere memorizzato e ripristinato con le chiamate di subroutine che lo modificano.
Ulteriori letture: