In MIPS montaggio , v'è un registro per il puntatore dello stack, e un altro registro per il puntatore telaio. Qual è il puntatore a cornice e qual è il suo scopo? In cosa differisce dal puntatore dello stack?
In MIPS montaggio , v'è un registro per il puntatore dello stack, e un altro registro per il puntatore telaio. Qual è il puntatore a cornice e qual è il suo scopo? In cosa differisce dal puntatore dello stack?
Risposte:
Nell'assemblaggio MIPS, il puntatore dello stack punta nella parte superiore dello stack. Quando si alloca 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 sui registri dove non convenzionali), si scrivono i parametri nello stack e quindi si fa avanzare il puntatore dello stack.
All'avvio del metodo, un parametro può trovarsi a un offset di 16($sp)
. Tuttavia, poiché le variabili vengono posizionate nello stack, il puntatore dello stack si sposta e lo stesso parametro può ora trovarsi in 24($sp)
invece. 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 della subroutine. Questo punta alla base del frame dello stack e i parametri passati alla subroutine rimangono in un punto costante rispetto al puntatore del frame.
Tieni presente che il puntatore al frame dovrà essere archiviato e ripristinato con chiamate di subroutine che lo modificano.
Ulteriori letture:
%ebp
registro del "puntatore di base" nella convenzione di chiamata x86? (Sono nuovo a tutto questo, ma sembra la stessa cosa di base dell'uso di sth like MOV 8(%ebp), %eax
o simili?)
Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.
non è del tutto chiara su cosa significhi