En el ensamblaje MIPS , hay un registro para el puntero de pila y otro registro para el puntero de marco. ¿Cuál es el puntero de marco y cuál es su propósito? ¿Cómo se diferencia del puntero de la pila?
28
En el ensamblaje MIPS , hay un registro para el puntero de pila y otro registro para el puntero de marco. ¿Cuál es el puntero de marco y cuál es su propósito? ¿Cómo se diferencia del puntero de la pila?
Respuestas:
En el ensamblaje MIPS, el puntero de la pila apunta a la parte superior de la pila. A medida que asigna espacio en la pila, el puntero de la pila ($ sp) se mueve para apuntar a la memoria libre.
Cuando se llama a una subrutina en el ensamblaje MIPS (los registros eran muy importantes en esos días, los parámetros basados en el registro no eran convencionales), uno escribe los parámetros en la pila y luego avanza el puntero de la pila.
Cuando se inicia el método, un parámetro puede estar en un desplazamiento de
16($sp)
. Sin embargo, a medida que las variables se colocan en la pila, el puntero de la pila se mueve y el mismo parámetro ahora puede ubicarse en su24($sp)
lugar. Esto puede hacer que el código sea un poco confuso.El puntero del marco ($ fp) apunta al inicio del marco de la pila y no se mueve durante la duración de la llamada de subrutina. Esto apunta a la base del marco de la pila, y los parámetros que se pasan a la subrutina permanecen en un punto constante en relación con el puntero del marco.
Tenga en cuenta que el puntero del marco deberá almacenarse y restaurarse con llamadas de subrutina que lo modifiquen.
Otras lecturas:
fuente
%ebp
registro 'puntero base' en la convención de llamada x86? (Soy nuevo en todo esto, pero suena como lo mismo que usar algo asíMOV 8(%ebp), %eax
o algo así )Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.
no está muy clara qué significa eso