View Full Version : [ASSEMBLER] Esercizio su Contenuto Indirizzo
canturio
22-02-2005, 14:20
Devo risolvere alcuni esercizi di Assembler.
Dato un programma in SPIM dire il contenuto al termine dell'esecuzione delle Word con indirizzo ind e ind+4
Il primo programma è questo:
.data
ind: .word 0,0,0,0,0,0
.text
li $t0, 0
li $t1, 6
la $t2, ind
loop: beq $t0, $t1, FINE
sw $t1, 0($t2)
addi $t0, $t0, 2
addi $t2, $t2, 8
j loop
FINE:
Qualcuno mi potrebbe dire il contenuto e spiegare cosa succede nei vari passaggi??? Ringrazio da subito chiunque risponda
canturio
22-02-2005, 15:15
Per quello che ho capito io, vengono allocati 6 spazi di memoria, 6 word da 32 bit. (Le parole sono da 32 bit, quindi occupano 4 celle da 8 bit)
Nella guida allo spim che ho, il comando .word viene descritto così:
.word w1, ..., wn
Store the n 32-bit quantities in successive memory words
Vengono assegnati i valori 0 a $t0 e 6 a $t1
Il comando "la" carica in $t2, il valore dell'indirizzo ind , ma non il suo contenuto (se non sbaglio)
(da manuale spim "la Rdest, address - Load computed address, not the contents of the location, into register Rdest.")
Poi parte un ciclo che fa da contatore, e il ciclo termina quando $to è uguale a $t1, cioè a 6 (il confronto lo fa con il comando beq, se i due valori sono uguali, viene esguito il salto all'etichetta Next, altrimenti prosegue con l'istruzione sottostante).
Poi con "sw" scrive il contenuto di $t1, nell'indirizzo 0, però non capisco bene cosa sta a significare il ($t2) tra le parentesi (mi sembra di ricordare che indichi lo spizzamento cioè da dove deve iniziare a scrivere, ma è questo il punto che non capisco)
Poi fa due somme immediate (incrementa $t0 di 2, e aggiunge 8 a $t2), e infine fa un jump all'inizio del ciclo per ricontrollare la condizione. Il ciclo dovrebbe essere rieseguito al massimo 3 volte, perchè dopo tre incrementi $t0 è 6.
Quello che non capisco cosa possa andare a scrivere se non c'è alcun immissione di dati (non c'è alcuna syscall)
Le parole sono da 32 bit, quindi occupano 4 celle da 8 bit
BravoGT83
22-02-2005, 16:05
Originariamente inviato da canturio
Per quello che ho capito io, vengono allocati 6 spazi di memoria, 6 word da 32 bit. (Le parole sono da 32 bit, quindi occupano 4 celle da 8 bit)
Nella guida allo spim che ho, il comando .word viene descritto così:
.word w1, ..., wn
Store the n 32-bit quantities in successive memory words
Vengono assegnati i valori 0 a $t0 e 6 a $t1
Il comando "la" carica in $t2, il valore dell'indirizzo ind , ma non il suo contenuto (se non sbaglio)
(da manuale spim "la Rdest, address - Load computed address, not the contents of the location, into register Rdest.")
Poi parte un ciclo che fa da contatore, e il ciclo termina quando $to è uguale a $t1, cioè a 6 (il confronto lo fa con il comando beq, se i due valori sono uguali, viene esguito il salto all'etichetta Next, altrimenti prosegue con l'istruzione sottostante).
Poi con "sw" scrive il contenuto di $t1, nell'indirizzo 0, però non capisco bene cosa sta a significare il ($t2) tra le parentesi (mi sembra di ricordare che indichi lo spizzamento cioè da dove deve iniziare a scrivere, ma è questo il punto che non capisco)
Poi fa due somme immediate (incrementa $t0 di 2, e aggiunge 8 a $t2), e infine fa un jump all'inizio del ciclo per ricontrollare la condizione. Il ciclo dovrebbe essere rieseguito al massimo 3 volte, perchè dopo tre incrementi $t0 è 6.
Quello che non capisco cosa possa andare a scrivere se non c'è alcun immissione di dati (non c'è alcuna syscall)
Le parole sono da 32 bit, quindi occupano 4 celle da 8 bit
infatti dovrebbe essere cosi neanch'io riesco a capire bene il comando sw $t1,0($t2)
canturio
23-02-2005, 06:55
up !!
canturio
23-02-2005, 12:07
Nessuna sa aiutarmi a risolvere l'esercizio???
:( :(
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.