En ensamblado MIPS , hay un registro para el puntero de la pila, y otro registro para el puntero de cuadro. ¿Qué es el puntero de marco y cuál es su propósito? ¿En qué se diferencia del puntero de pila?
Comentarios
- ¿Qué investigación ha realizado ya y cuál es su familiaridad con los términos? ¿Para qué sistema es esto (diferentes sistemas tienen terminología diferente)?
- Solo quiero familiarizarme con el puntero de marco (ensamblaje de mips). No ' no entiendo cómo ayuda, ¿por qué lo necesitamos? Muchas gracias
Respuesta
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.
Al llamar a una subrutina en el ensamblaje de MIPS (los registros eran un bien escaso en esos días – parámetros basados en registros donde no es convencional), uno escribe los parámetros en la pila y luego avanza el puntero de la pila.
Cuando el método comienza, 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 24($sp)
en su 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 mientras dura la llamada a la 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 a subrutinas que lo modifican.
Para leer más:
- UWisc Madison CS 354 Convenciones MIPS
- Capítulo 3 Lenguaje ensamblador MIPS
- UMD CS 311 Comprensión la pila
- UWash Seattle CSE 410 Resumen de convenciones de llamadas de MIPS
- Wikipedia Puntero de marco
Comentarios
- No ' No sé qué se entiende por " los registros eran un bien escaso en esos días: los parámetros basados en registros eran " no convencionales, pero los parámetros también se puede poner en la pila cuando el # de regi sters es limitado. Si tiene 35 parámetros, por ejemplo (creo que MIPS tiene 32 registros), entonces necesitaría poner los 3 parámetros finales en la pila. También más específico para la implementación, el FP estaría en la dirección en la memoria donde está la dirección de retorno.
- @Jonathan MIPS De esos 32 registros, $ 0 era 0. $ at estaba reservado, $ v0 y $ v1 eran para el valor de retorno de las llamadas a funciones, $ a0 – $ a3 eran parámetros de función, $ t0 – $ t9 eran temporales (el llamador conserva), $ s0 – $ s7 se guardaron y el propio sistema utilizó $ gp, $ sp, $ fp y $ ra. En total, solo había 24 registros de propósito general y algunos de ellos incurrían en gastos generales si deseaba usarlos. Por lo general, solo usó los registros $ t (10). Compare esto con el Itanium que tiene 128 registros. Al llamar a una función en MIPS con 35 parámetros, probablemente los pondría todos en la pila.
- @Jonathan I ' también apuntaré a este comentario : " Bulldozer AMD: 96 GPR físicos, Intel Sandy Bridge: 160 GPR físicos, Intel Haswell: 168 GPR físicos ". Las cosas se ponen divertidas con múltiples máquinas centrales. SPARC tenía 160 registros . También le señalo la ventana de registro que entró en parte de la filosofía de diseño de MIPS con la mitad de registros que sus contemporáneos.
- Entonces , esto es lo mismo que el uso convencional del registro
%ebp
puntero base en la convención de llamadas x86? (Soy ' nuevo en todo esto, pero suena como lo mismo básico que usar algo comoMOV 8(%ebp), %eax
o algo así) - La línea
Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.
no es muy clara sobre lo que eso significa