PDA

View Full Version : Array in Assembly MIPS


Titti92
09-08-2013, 14:25
Ciao a tutti ho un problema da un po' che non riesco a risolvere. Riesco a dichiarare array in Mips ma solo quelli con dei valori "precisi" già assegnati, ad esempio:
.float 1.0,2.0
Mentre non riesco in nessun modo a dichiarare array che nel C sono dichiarati ad esempio:
float A[100]
oppure
int B[10][2]
come si fanno questi tipi di dichiarazioni?

oce
09-08-2013, 14:36
Se ricordo bene basta aggiungere:

.space 100

Per riservare spazio per gli elementi. Ovviamente la dimensione devi calcolarla in bytes necessari per occupare il numero di elementi che vuoi utilizzare.

Titti92
09-08-2013, 14:46
quindi per quanto riguarda gli esempi sarebbe:

A: .space 100
B: .space 20

corretto?

L'UnicoVeroArcangelo
11-08-2013, 21:35
ciao, allora innanzitutto devi vedere quanto è grande una variabile di tipo float nella tua architettura, comunque normalmente un numero float occupa 8 byte..
A questo punto prova a cambiare la direttiva di .align, che dovrà essere align 3 poiché dovrai allineare il prossimo dato ad un indirizzo multiplo di 2^3, cioé 8 visto che parliamo di float..
A questo punto puoi sistemare le dimensioni delle variabili che come ha detto oce: "la dimensione devi calcolarla in bytes necessari per occupare il numero di elementi che vuoi utilizzare".
Ok visto che hai float A[100] per dichiarare quest'ultimo dovrai scrivere
aa: .space 800
mentre per float B[10][2] che alla fine, come hai notato è come scrivere B[20], visto che alla fine è una matrice che contiene 20 elementi e visto che le aree di memoria sono ugualmente contigue.
Quindi avrai:
bb: .space 160

Ora penso di aver scritto informazioni corrette ma non ne sono sicuro al 100%, visto che devo dare l'esame sul mips tra un mese e che devo ancora iniziare a studiare.... :D

edit: ops mi sono accorto ora rileggendo, prima di chiudere la scheda, che hai chiesto come si dichiari int B[10][2] e non float B[10][2] come avevo scritto.... XD
Bé in questo caso dovrai scrivere:
.align 2 #questo perché ora hai davanti un array di interi e l'alineamento dovrà essere di 2^2, cioé ora dovrai muoverti di 4 byte alla volta..
#poi
bb: .space 80 #questo perché hai un vettore di 20 interi ed ogni intero occupa 4 byte

Ok spero di non aver creato confusione e ripeto: non sono certo che le mie siano informazioni corrette al 100%.. :P
Notte..

Titti92
17-08-2013, 14:16
Ok, grazie a tutti delle risposte!