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:

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 como MOV 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *