vuoi
o PayPal
tutte le volte che vuoi
Operativo Input
• $ V0 Operazione - Richiesta: $ $4Stao Parametri: Eventuali - di, /. .. Output • SIVO $ fo Eventuale Risultato - :/ Risultato Argomenti Syscall Descrizione (( )No( )) Isaoquo . ... .. 1 Stampa Intero Intero 4 Stringa Stampa Stringa Address 5 Leggi Intero Intero $ ADDROSSBUFFER Io = 8 Leggi Stringa $0.1 CHANNUM--10 Fine Programma Lettura di un input e interruzione di un programma. .textmain: move $t0, $zero #assegno zero a $t0 e inizializzo MAX do: li $v0, 5 #imposto il valore 5 a $v0, da usare per leggere da syscall syscall #leggo l'intero da tastiera e lo imposto a $v0 seq $t1, $t0, $zero #max == 0 sgt $t2, $v0, $t0 #dato > max or $t1, $t1, $t2 #imposto a $t1 il risultato dell'or tra $t1 e $t2 beqz $t1, endIf #se $t1 è false (0) vado a endIf move $t0, $v0 #imposto a $t0 il nuovo max letto da tastiera endIf: bnez $v0, do #se $v0 != zero, ricomincio il ciclo li $v0, 1 #imposto 1 per stampare con syscall move $a0, $t0 #preparo l'argomento $a0 da stampare (max) syscall li $v0, 10#imposto 10 per chiudere il programma con syscall
syscallsyscall VETTORI E MATRICI
VETTORESEQUENZA ELEMENTI MEMORIA
DI UGUALI CONSECUTIVI
DIMENSIONI
DI INNXDIM
INDICIZZATI TOTALE
0 N DIMENSIONE
DA ELEMENTO1A =- ., USANDO
POSSONO DATANE
LLA ZONA
DEFINITI STATICAMENTE
ESSERE •PRIMO ELEMENTO
l'PER UNA INDICARE
ETICHETTA DEL
INDIRIZZO
DEL VETTORE
PER L'INDIRIZZARE È AGGIUNGERE
ELEMENTO ESIMO NECESSARIO
1-L' XD MOFFSET / ELEMENTO
I _( )BYTE
VETTORE 255
ADA 0
DI valori INTERI
LABEL 1,213,4
BYTE: < )(
VETTORE DI CARATTERI BYTE
INTESTO SEGUITI 0
DA" "LABEL ASCIIZ STRINGA! . (
VETTORE BIT
WORD NUMERI BYTE
I4CODIFICATI32DI A In( )b
415,6 BYTE
4LABEL DA
ELEMENTI}1,2
WORD: ,,• (100 /
VALORE
LABEL WORD ELEMENTI DI
100:O: O•I BYTE POSSONO
DELLE DUE MODI
INWORD ESSERE CODIFICATI : )BIG
(( ) LSBSIGNIFICATIVE
LESSSIGNIFICATIVE BYTE
MSBENDIAN NOSTDAL BYTE AL• :-LITTLE
LSBDAL MSBENDIAN Ali :-
ACCESSO AGLI PER INDICE
ELEMENTI ( )i
INDIRIZZO
INDIRIZZO DELL' i DIM
ELEMENTO DEL ELEMENTO
VETTORE= + ✗
-ESEMPIO$-10 INDICE ELEMENTO=$17 VETTOREINDIRIZZO=tz$ INDIRIZZO ELEMENTO= (#$17,2 )tl$ $10SHIFTOSU DISINISTRA moltiplico2 BITA n✗,Siti triste$ADD , _SE PUÒMEMORIA FARESIVETTOREIL INE :, (#$17,2 )tl$ $10SHIFTOSLL DISINISTRA moltiplico2 BITA n✗,$50 / )$17LW LABEL VETTORE,SOMMA VETTOREUN 3DEGLI DIVISIBILECON INDICEELEMENTI ✗DI(MATRICI )VETTORI DI VETTORI 'UNA NUNA SUCCESSIONENXMMATRICE COMPOSTIDiE VETTORI DAM ELEMENTI 'IL NimENUMERO TOTALE ELEMENTIDI 'LA NXNHDIMDIMENSIONE ELEMENTIBYTEIN E _ CONTENENTELA DEFINISCE ELEMENTIUN VETTORECOMESTATICAMENTESI NXM( 13×7191MATRICE WORD :O MATRICE: < (SOMMA )DELLA DIAGONALE INEFFICIENTE(SOMMA EFFICIENTE )DIAGONALEFARE ESERCIZIO A FINE LEZIONE 4 (SOMMA DIAGONALI DELLE MATRICI) SOLUZIONEINIZIO LEZIONE 5 FUNZIONI PROCEDUREEFUNZIONEFRAMMENTO RICEVE DEGLICODICE UN CALCOLOCHEDI ARGOMENTI E SVOLGECHIAMARE FUNZIONEUNA )JAL (FUNZIONEETICHETTA JUMP AND LINK( l'SIRA DELL'RICORDA )REGISTRO
UNASTACK
IN:
- ALL'INIZIO DELLA FUNZIONE:
<STACKALLOCARE SU WORD>
<ABBASTANZA NECESSARI>
<PRESERVARE REGISTRI PER I$50,12>
<ISSPSUBI- , ( )>
<SALVARE STACK TENERE DELL' OFFSET REGISTRI>
<SU I CONTO)OlslsoSW Stra- , )41$50$00su- / 81$81$01SW- ,>
- ALLA FUNZIONE DI USCITA:
<RIPRISTINARE DIAGLI OFFSET STESSI REGISTRI DA PRIMA SALVATI>
<ISTACK ,)/straLW Slsp- 0, 41$81Stao- LW , Hsistailw- b.,>
<DISALLOCARE PRECEDENZA SPAZIO' LO INALLOCATO$$ 12ADDI- SP so ,,>
<TORNARE CHIAMANTE FUNZIONE ALLA JRSIRA-RECORD DI ATTIVAZIONE>
<LA PER STACK ANCHE USATA E : $00 $04COMUNICARE REGISTRI 4ULTERIORI ARGOMENTI OLTRE I, . . .>
<COMUNICARE ULTERIORI REGISTRI RISULTATI OLTRE V1V0i ,,>
- ALLOCARE VARIABILI LOCALI ALLA PROCEDURA:
<ACTIVATION QUESTO STACK STACKFRAME SULLA RECORD BLOCCO VIENE ALLOCATOo SUBITO PRIMA CHIAMATA EDELLA VIENE DOPO ALLA FUNZIONE RILASCIATOLO l'STACK INDICIZZARE VARIA POINTER QUINDI ESECUZIONE CONVIENE FUNZIONE DELLA DURANTE , DATI PUNTA FRAME POINTER I DEL>
FRAME PUNTATORE CHEFISSOUN ILCON : ,( )SIFPRECORDALL' ATTIVAZIONEDELINIZIO DI K1( ARGOMENTI ERISULTATI" " " " :EEISFP FP CHIAMANTESISP REGISTRI SALVATIVARIABILI LOCALIRICORSIVEFUNZIONIDEFINIZIONEUNA ANCHERICORSIVASI CHIAMAFUNZIONE DICE QUANDO STESSA INDIRETTAMENTESE , .VIENE PROBLEMI 'UTILIZZATA PICCOLIRISOLVERE COMPLESSI PROBLEMIRIDUCENDOLIPER In PIUESEMPIO FATTORIALEFUNZIONE: ÈIL FATTORIALE NDI 1UN I NUMERIDIINTERO TUTTIILNUMERO PRODOTTO DA NAFATTORIALEBASECASO 1=1: DI- RIDUZIONE N1DEL -1PRIMA DA a- MOLTIPLICOproblema NumeriI;SOLUZIONE QUANTOFINALE MOLTIPLICO PRIMA PER N- :IMPLEMENTAZIONE ITERATIVA
#a0 = Nfattoriale: li $v0, 1 # risultato = 1 ciclo: blez $a0, fine # se N <= 0 esc omul $v0, $v0, $a0 # risultato * N sub $a0, $a0, 1 # N - 1 j ciclo fine: jr $ra # esco dalla funzione IMPLEMENTAZIONE RICORSIVA #a0 = Nfattoriale_ricorsivo: blez $a0, caso_base # se N <= 0 siamo nel caso base subi $sp, $sp, 8 # alloco due word sulla stack sw $ra,
0($sp) # salvo $rasw $a0, 4($sp) # salvo $a0 sub $a0, $a0, 1 # N -1 jal fattoriale_ricorsivo # calcolo di fattoriale (N -1) lw $ra, 0($sp) # ripristino $ra lw $a0, 4($sp) # ripristino $a0 addi $sp, $sp, 8 # disalloco due word dalla stack mul $v0, $v0, $a0 # risultato * N jr $ra caso_base: li $v0, 1 # risultato = 1 jr $ra
ESERCIZIO MASSIMO COMUNE DIVISORE RICORSIVO: GESTIRE BASE CASO
- ESEGUIRE IL CODICE NECESSARIO
- SALTA JR ALLA SUCCESSIVA ISTRUZIONE
- GESTIRE IL CASO RICORSIVO
- ALLOCARE MEMORIA NELLO STACK
- SALVARE I REGISTRI
- ESEGUIRE IL CODICE NECESSARIO
- RICHIAMARE JAL ALLA PARTENZA DELLA FUNZIONE
- LIBERARE E USCIRE DALLO STACK
- CASO BASE: (3° CASO)
- ESCI
ESEMPIO GCD: -15, 4 = 45
GRAFICO X: -7 = 15
Y: 15 = 4 = 3° caso
Y = GCD
ESEMPIO -15, 4 = 45
in errore( l'ultimo $ra eseguito punterà ad un indirizzo non valido, utilizzando il JAL nel main sifornisce un ultimo $