PDA

View Full Version : Puntatore con doppio indice in Assembly


Titti92
05-11-2015, 17:09
Ciao a tutti. Dovrei tradurre in assembly il seguente codice c:
float (*d)[n] = c;
d[i][j] = t;

Possibile che la prima riga sia così? Suppongo che c sia memorizzato in f0 e n in s0:

d: .float 0
.
.
.
la $a0,d
addi $t0,$t0,4
mult $s0,$t0
mflo $t0 #t0=n*4, per fare l'indirizzamento
add $t0,$a0,$t0 #ho completato l'indirizzamento
sw $f0,0($t0) #ho completato la prima riga del codice c

Il problema, per quanto riguarda la seconda riga di codice, è che non so come indirizzare d, in quanto ci sono due indici. So indirizzare una matrice, perché conosco gli elementi in ogni riga, ma con un puntatore non saprei come fare...

Titti92
07-11-2015, 14:46
nessuno?

Titti92
18-01-2016, 16:18
una mano?

cdimauro
19-01-2016, 17:26
Purtroppo per risponderebbe bisognerebbe conoscere l'architettura MIPS.

Titti92
20-01-2016, 08:05
E invece sapresti spiegarmi cosa accade nella seconda riga del codice C? Perché sembra un indirizzamento tipo matrice, magari conoscendo nel dettaglio cosa accade riesco a tradurlo.

cdimauro
21-01-2016, 20:42
d sembra un vettore di puntatori a vettori di float.

Quindi d[i] selezioni l'indirizzo dell'i-esimo vettore di float. Quando poi viene applicato [j], l'indirizzo di prima viene usato come base per accedere allo j-esimo elemento, che è un float.

Dovrebbe essere abbastanza semplice da implementare in assembly.

Titti92
22-01-2016, 07:55
In poche parole sto accedendo all'elemento i+j del puntatore giusto?

Titti92
22-01-2016, 09:56
Un'altra cosa... puoi gentilmente dirmi cosa fa la prima riga di codice c?