Complimenti, sei riuscito a spiegare e a far capire perfettamente a un ignorante come me. Hai un futuro come insegnante di informatica, davvero!
Posso approfittare e chiederti ancora un paio di cose?
Arigatou gozaimasu mau-senpai:inchino:
:asd: grazie; chiedi pure
---------- Post added at 10:40 ---------- Previous post was at 10:09 ----------
:asd: grazie; chiedi pure
ti voglio fare un esempio pratico; mettiamo il caso di voler fare un'addizione fra due numeri salvati in due registri diversi n ed m, ora la somma fra i due esiste un'istruzione asm semplice:
ADD $s $n $m
Questa istruzione salva nel registro s la somma del contenuto dei due registri; questo ha un ritardo di: Tadd = Tfetch + tadd = (2 tao + ta) + tao = 3 tao + ta
Ora la somma si può risolvere anche con un metodo ricorsivo, ovvero questo:
Loop: Beq $m $0 Esci (Branch if equal, ovvero se sono uguali salta all'etichetta, in questo caso se il contenuto del registro m è uguale a quello del registro 0 (che contiene la costante 0) salta all'etichetta Esc)
Addi $n $n 1 (Addiziona una costante al contenuto di un registro)
Addi $m $m -1 (Idem ma con una costante in complemento a due)
Jump Loop (Salto incondizionato)
Esci: Store $s[$i] $n (Scrive il contenuto del registro n in memoria ad indirizzo $s + $i)
Ora passiamo ai ritardi: Tadd = Tfetch + m * (tbeq + taddi + taddi + jump) + tstore = (2 tao + ta) + ((m+1) * (4 tao + ta)) + m * ((3 tao + ta) + (3 tao + ta) + (3 tao + ta) + (4 tao + 2 ta)
Entrambe eseguono una somma, questo per farti capire come può influenzare l'ottimizzazione delle istruzioni :asd:
Ultima modifica: