View Full Version : Array in Assembly MIPS
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?
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.
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..
Ok, grazie a tutti delle risposte!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.