 | |
Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum |
Dubbio su BEQ/BNE Clicca QUI per vedere il messaggio nel forum |
Marcoverga |
Sperando che qualcuno almeno questa volta mi risponda, posto il mio ulteriore dubbio...
add $s4, $s1, $s2
lw $s0, 0($s5)
addi $s6, $s6, 1
bne $s0, $s6, -12
L'istruzione bne $s0, $s6, -12 che nell'esercizio viene sempre eseguita:
1. mi porta indietro di 3 istruzioni (-12/4) perchè "il compilatore sostituisce l'etichetta L1 con l'indirizzo di parola relativo al PC --> (L1-PC)/4"
oppure
2. La trasformazione di cui sopra è già stata eseguita e quindi salta indietro di 12 istruzioni (la qual cosa mi sembra strana, visto che le istruzioni nell'esercizio sono solo 4...)????? |
guitux |
ciao!
è molto semplice:
bne --> test di non uguaglianza
quindi:
se $s0 != $s6
allora salta a:
PC + 4 + (-12*4)
ovvero
PC + 4 perchè punta sempre all'istruzione successiva, -12*4 xe ogni istruzione è grande 32bit ovvero 4byte, quindi lui salta alla terza istruzione precedente
L1, che è un etichetta, corrisponde ad un indirizzo, x l'assemblatore L1 corrisponde ad es a 0x00423556, quindi per saltare a tale etichetta deve fare i calcoli che ti ho scritto sopra... ;) |
Marcoverga |
Perfetto! Perchè non riuscivo a capire se il -12 fosse il numero di istruzioni o il numero di parole...
Adesso è tutto chiaro! Grazie!!! |
cloda01 |
PC + 4 perchè punta sempre all'istruzione successiva, -12*4 xe ogni istruzione è grande 32bit ovvero 4byte, quindi lui salta alla terza istruzione precedente
salta ala terza istruzione precedente intendi che riprende dalla add o dalla lw??per me riprende dalla lw perchè il pc incrementa automaticamente di 4 quindi per tornare all'istruzione stessa(la beq in questo caso) devi mettere -4,per tornare alla addi -8 mentre per tornare alla lw -12..
quindi riprende dalla lw?nn dovrebbe essere così? |
guitux |
no... salta alla "add"
12 / 4 = 3
cmq per provare usa il simulatore MIPS ;)
fammi sapere ;) |
guitux |
prova questo mio programmino (scritto solo ed esclusivamente per fare un test...)
--------------------------------------------------
#prova salta condizionato
.data
prima: .asciiz "eseguo add --"
seconda: .asciiz "eseguo addi --"
terza: .asciiz "eseguo sub --"
quarta: .asciiz "eseguo bne --"
.text
.globl main
main:
add $s4, $s1, $s2
li $v0, 4
la $a0, prima
syscall
addi $s0, $zero,0
li $v0, 4
la $a0, seconda
syscall
sub $s0, $s0, $s0
li $v0, 4
la $a0, terza
syscall
li $v0, 4
la $a0, quarta
syscall
bne $s0, $s4, -12
li $v0, 10
syscall
--------------------------------------------------
ebbene si! torna all'istruzione add ;) |
cloda01 |
bne $s0, $s4, -12
scusa come fai a compilare con con il -12?
a me fa compila spòp se metto come destinazione di salto un etichetta |
cloda01 |
Originally posted by cloda01
scusa come fai a compilare con con il -12?
a me fa compila spòp se metto come destinazione di salto un etichetta
*solo |
guitux |
fai "ignora" e poi esegui...
scusa ma ho scritto quel codice in 2 sec giusto per fare una prova... modificalo in meglio ;)
cmq lo puoi eseguire! |
guitux |
Originally posted by guitux
fai "ignora" e poi esegui...
scusa ma ho scritto quel codice in 2 sec giusto per fare una prova... modificalo ;)
cmq lo puoi eseguire! |
niko_2307 |
ho provato anch'io a fare questo esercizio (Pedersini Appelo giugno 2008).... si tratta di un'architettura multiciclo.....tutto chiaro fino a quando il testo non chiede se ci sono degli hazard, il che mi sembra improbabile in quanto le istruzioni vengono eseguite in serie
qualkuno sa dirmi se ho detto bene??:? |
guitux |
tutto chiaro fino a quando il testo non chiede se ci sono degli hazard, il che mi sembra improbabile in quanto le istruzioni vengono eseguite in serie
qualkuno sa dirmi se ho detto bene??:? [/B]
è una domanda "trabocchetto" (perdonate il termine), se hai una CPU singolo o multi ciclo ovviamente non posso esserci hazard!
quindi la risposta è no, non ci sono hazard! (solo una CPU pipeline può avere alee a causa di hazard sui salti, o sui dati o hazard strutturali) |
|
|
|
|