Saltar al contenido

MIPS: ¿Cómo asigna MIPS la memoria para las matrices en la pila?

Solución:

Bueno … debe tener en cuenta que MIPS, como C, esencialmente tiene tres formas diferentes de asignar memoria.

Considere el siguiente código C:

int arr[2]; //global variable, allocated in the data segment

int main() {
    int arr2[2]; //local variable, allocated on the stack
    int *arr3 = malloc(sizeof(int) * 2); //local variable, allocated on the heap
}

El ensamblaje MIPS admite todos estos tipos de datos.

Para asignar una matriz int en el segmento de datos, puede usar:

.data

arr: .word 0, 0 #enough space for two words, initialized to 0, arr label points to the first element 

Para asignar una matriz int en la pila, puede usar:

#save $ra
addi $sp $sp -4  #give 4 bytes to the stack to store the frame pointer
sw   $fp 0($sp)  #store the old frame pointer
move $fp $sp     #exchange the frame and stack pointers
addi $sp $sp -12 #allocate 12 more bytes of storage, 4 for $ra and 8 for our array
sw   $ra  -4($fp)

# at this point we have allocated space for our array at the address -8($fp)

Para asignar espacio en el montón, se requiere una llamada al sistema. En el simulador de spim, esta es la llamada al sistema 9:

li $a0 8 #enough space for two integers
li $v0 9 #syscall 9 (sbrk)
syscall
# address of the allocated space is now in $v0
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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