Homepage  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


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Architettura degli elaboratori e delle reti
 
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)

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate