|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Mar 2005
Messaggi: 54
|
Struttura Dati in MIPS - alloc dinam
Salve, sto realizzando un piccolo progettino in assembler secondo l'architettura MIPS usando il simulatore SPIM.
![]() 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. ![]() 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. ![]() 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
__________________
... making order... --------------------------------- Rendi più sicuro il tuo mulo! Visita l'Enetec Emule Security Center |
![]() |
![]() |
![]() |
#2 | ||
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
quella syscall funziona tipo malloc in c!
Quote:
![]() conti i byte che devi allocare e il numero finale lo metti in $a0 esempio: struttura dati con 2 word (1word = 4byte): Codice:
addi $a0, $0, 8 Quote:
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: Codice:
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 ![]()
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" Ultima modifica di Oceans11 : 30-05-2007 alle 09:03. Motivo: ho dimenticato i tag code :D |
||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:37.