| |
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 |
[ESERCIZIO] Traduzione di pseudoistruzioni Clicca QUI per vedere il messaggio nel forum |
Marcoverga |
Premesso che mi sto preparando per l'esame del 25/09 per la prima volta, non mi è ben chiaro come funziona la traduzione...
Un esercizio dice di tradurre le seguenti pseudoistruzioni in Assembly MIPS nativo e in linguaggio macchina:
li $5, 4^12
divi $12, $13, 3
bgei $18, 1, -16 #(branch on greater or equal than - immediate)
"in Assembly MIPS nativo" significa ad esempio che la move $4, $5 deve essere sostituita da add $4, $zero, $5???
E poi come si legge la tabella del MIPS Instruction Set? Perchè ad esempio la bgei non c'è... |
guitux |
"in Assembly MIPS nativo" significa ad esempio che la move $4, $5 deve essere sostituita da add $4, $zero, $5???
esatto!
E poi come si legge la tabella del MIPS Instruction Set? Perchè ad esempio la bgei non c'è...
bella domanda!
proviamo a fare questo:
divi $12, $13, 3
tipo I
op=6bit --> 26dec
in realtà 26dec si ferisce alla div, non alla divi...quindi?
rs(5bit) --> $13 --> 13dec
13dec è corretto o a quale registro corrisponde?
rt(5bit) --> $12 --> 12dec
12dec è corretto o a quale registro corrisponde?
indirizzo(16bit) --> 3dec
soluzione corretta? |
Marcoverga |
ma la divi è una pseudoistruzione...
Quindi non bisogna fare qualcosa tipo
addi $to, $0, 3
div $13, $t1
mflo $12
In questo modo abbiamo l'opcode di tutte le istruzioni! |
guitux |
si ho scritto una cavolata...
prima si traduce la pseudo-istruzione in istruzione/i assembly nativo, poi quest'ultima in binario...
trovo molto interessante questa pseudo-istruzione:
li $14, 16^5 |
Marcoverga |
Quella è una stupidata... Perchè 16 non è altro che 2^4, e quindi 16^5 diventa (2^4)^5 = 2^20
Usando poi lei due istruzioni lui e ori si risolve il tutto!
lui $14, 1000000000000000 (euivalente a 2^15)
ori $14, $14, 0 (equivalente a 0000)
il gioco è fatto! :D |
guitux |
:D e se la base non è multiplo di due? |
Marcoverga |
Bisogna "semplicemente" trasformarlo in binario! |
niko_2307 |
li $25, (2^25 + 35) #load immediate
blei $18, +19, -20 # brench on less than or equal to immadiate
come le trasformate in assembly mips nativo?? |
PrizeD |
Io farei:
lui $25, 0x200
add $25, $0, 0x23 #qui finisce la li
sub $t0, $18, 19
blez $t0, -20 #qui la blei
Praticamenta la li, visto che devo caricare un numero conpiù di 16 bit lo spezzo in due e uso la lui per caricare la parte più significatica del numero, e poi faccio una add per il 35.
La blei mi dice che se $18<= 19 allora salto a -20, e quindi io l'ho vista come se $18-19<=0 allora salto a -20.
Correggetemi se ho sbagliato, perchè se non ricordo male anke nel compito ho fatto così :D |
PrizeD |
Originally posted by Marcoverga
Quella è una stupidata... Perchè 16 non è altro che 2^4, e quindi 16^5 diventa (2^4)^5 = 2^20
Usando poi lei due istruzioni lui e ori si risolve il tutto!
lui $14, 1000000000000000 (euivalente a 2^15)
ori $14, $14, 0 (equivalente a 0000)
il gioco è fatto! :D
Se fai così tu in $14 ci metti un numero da 16+16 bit, perchè con la lui metti il num dal 16 bit in poi, dovresti fare invece 20-16=4, quindi in $14 metti 2^4 (es lui $14, 0x10 # o anche lui $14, 10000), e poi l'ori è ok |
|
|
|
|