PDA

View Full Version : Struttura Dati in MIPS - alloc dinam


bulkideas
30-05-2007, 02:53
Salve, sto realizzando un piccolo progettino in assembler secondo l'architettura MIPS usando il simulatore SPIM. :cry:
Ora vorrei implementare alcuni punti del progettino utilizzando delle strutture dati (chiamati anche aggretati in MIPS) allocate dinamicamente attraverso la chiamata di sistema (syscall) con codice 9, chiamata SBRK. A tale chiamata di sistema va passato come argomento nel registro $a0 la dimensione in byte del blocco da allocare e ritorna nel registro $v0 il puntatore al blocco allocato.
Ora vorrei capire meglio come allocare una struttura dati seguendo questa chiamata di sistema. :confused:
Precisamente avrei bisogno di un piccolo aiuto :

- sull'indicazione della dimensione del blocco di memoria da allocare (se ho intenzione di allocare una struttura con 2-3-4 campi di word per esempio);

- il modo in cui poter utilizzare il puntatore alla struttura dati restituito dalla chiamata di allocazione dinamica e come interagire tra i campi;

- sul metodo (nome istruzione) dell'eventuale cancellazzione in una lista di elementi i quali sono aggregati (o strutture come le si voglia chiamare).

Vi assicuro che ci sto ragionando da alcuni giorni su e la scarsa quantità o qualità di manuali e guide (ovviamente quasi tutte in inglese ) reperibili in rete non mi hanno permesso di andare avanti + di tanto. :mc:
A breve vi posterò inoltre il codice di prova relativo ai tentativi di implementazione.
In attesa di una risposta vi ringrazio anticipatamente e vi porgo i miei distinti saluti.

Bulkideas

Oceans11
30-05-2007, 10:02
quella syscall funziona tipo malloc in c!

sull'indicazione della dimensione del blocco di memoria da allocare (se ho intenzione di allocare una struttura con 2-3-4 campi di word per esempio);

vedi che lo sai già!!l'hai scritto! :D

conti i byte che devi allocare e il numero finale lo metti in $a0

esempio: struttura dati con 2 word (1word = 4byte):

addi $a0, $0, 8

(nota: $0 oppure $zero è il registro messo a terra, perennemente zero!)

il modo in cui poter utilizzare il puntatore alla struttura dati restituito dalla chiamata di allocazione dinamica e come interagire tra i campi;


in $v0 c'è l'indirizzo del primo byte allocato in mem...quindi viene facile...considera la tua struttura come un array...in questo caso un array di word! quindi a partire dall'indirizzo in $v0 hai la tua prima word, 4 byte dopo la tua seconda word e così via...!


esempio: in $v0 c'è sto famoso indirizzo:

addi $v0, $0, 9
addi $a0, $0, 8
syscall

sw $t0, 0($v0) # in $t0 c'è la prima word
sw $t1, 4($v0) # in $t1 c'è la seconda word


per l'ultimo punto...boh! :D