[1 Luglio 2022] Assembly #48
Elia-Belli
started this conversation in
Assembly (M-Z)
Replies: 6 comments
-
|
Beta Was this translation helpful? Give feedback.
0 replies
-
|
Beta Was this translation helpful? Give feedback.
0 replies
-
Versione iterativa e versione ricorsiva
|
Beta Was this translation helpful? Give feedback.
0 replies
-
|
Beta Was this translation helpful? Give feedback.
0 replies
-
##########################################
# INSERIRE I PROPRI DATI QUI
# Nome:
# Cognome:
# Matricola:
##########################################
# NON MODIFICARE QUESTA PARTE
.data
buffer: .space 20
.text
main:
li $v0, 8 # Codice per input stringa
la $a0, buffer # Carica indirizzo base in $a0
li $a1, 20 # Alloca al massimo 20 caratteri
syscall # $a0 contiene l'indirizzo base della stringa
##########################################
## INSERIRE IL CODICE QUI
li $t0,0 #indice
li $v0,0 #somma occorenze cifre divisibili per 2
li $v1,0 #somma occorenze cifre divisibili per 4
li $t3,2
jal contaDiDueQuattro
move $a0,$v0 #stampo valore numero di cifre divisibili per 2
li $v0,1
syscall
li $v0,11 #stampo a capo
la $a0,0xA
syscall
move $a0,$v1 #stampo valore numero cifre divisibili oer 4
li $v0,1
syscall
li $v0,10
syscall
contaDiDueQuattro:
add $t1, $t0,$a0 #il mio offset
lb $t1,($t1) #prendo l'elemento in posizione 0
beq $t1,0xA, fine #se il carattere è uguale a \n
subi $t1,$t1,48
divu $t1,$t3
mfhi $t2
bne $t2,0,Incremento
beq $t1,0,Incremento #controllo se è uguale a 0, in quel caso continuo senza aggiungere nulla
bge $t1,4,AggiungiQuattro #deve essere più grande o uguale a 4
bge $t1,2, AggiungiDue # deve essere più grande o uguale a 2
AggiungiQuattro:
addi $v1,$v1,1
addi $v0,$v0,1
j Incremento
AggiungiDue:
addi $v0,$v0,1
Incremento:
addi $t0,$t0,1 #aumento per viuaggiare nella mia stringa
j contaDiDueQuattro #ritorno alla mia funzione
fine:
jr $ra #fine |
Beta Was this translation helpful? Give feedback.
0 replies
-
Mia soluzione iterativa ##########################################
# INSERIRE I PROPRI DATI QUI
# Nome: Dadaismo
# Cognome: Dadaismo
# Matricola: Dadaismo
##########################################
# NON MODIFICARE QUESTA PARTE
.data
buffer: .space 20
.text
main:
li $v0, 8 # Codice per input stringa
la $a0, buffer # Carica indirizzo base in $a0
li $a1, 20 # Alloca al massimo 20 caratteri
syscall # $a0 contiene l'indirizzo base della stringa
##########################################
## INSERIRE IL CODICE QUI
.eqv indice, $t1 #Assegno le mie stringhe equivalenti ai registri
.eqv strI, $t3 #strI contiene il mio indirizzo offsettato e il byte a cui indicherà
.eqv counter2, $v0 #counter di num divisibili per 2
.eqv counter4, $v1 #counter di num divisibili per 4
.eqv resto, $t5 #dove caricherò il resto dal registro hi
move $v0, $0 #In v0 c'è ancora l' 8 della syscall, lo tolgo
li quattro, 4 #Per divu ho bisogno della divisione tra due registri, devo loaddare 4 e 2
li due, 2
jal contaDivDueQuattro
move $a0, $v0
li $v0, 1 #Carico counter2
syscall
li $v0, 11
li $a0, 10 #Carico '\n'
syscall
li $v0, 1
move $a0, $v1 #Carico counter4
syscall
li $v0, 10
syscall #:-)
contaDivDueQuattro:
add strI, $a0, indice #Carico indirizzo offsettato in strI
lb strI, (strI) #Carico byte associato a strI in strI
beq strI, 10, Fine #Se il carattere è '\n', termino l'iterazione
beq strI, 48, Ritorno #Se il carattere è 0, skippo a prossima iterazione
subi strI, strI, 48 #Sottraggo 48 dal mio carattere ottenendo il numero associato
divu strI, quattro #Divido il numero per 4
mfhi resto #Sposto il resto della divisione in resto
beqz resto, addTo4 #Se il resto è 0, il numero è multiplo di 4 e di 2, vado in addTo4
divu strI, due #Divido il numero per 2
mfhi resto #Sposto il resto della divisione in resto
beqz resto, addTo2 #Se il resto è 0, il numero è multiplo di 2, vado in addTo2
Ritorno:
addi indice, indice, 1 #Mi sposto al prossimo carattere della stringa
j contaDivDueQuattro #Itero!
addTo4:
addi counter4, counter4, 1 #counter4++
addTo2:
addi counter2, counter2, 1 #counter2++
j Ritorno
Fine:
jr $ra
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Soluzione del Prof
Le soluzioni fornite dal professore potrebbero essere incomplete o poco chiare, quindi sono benvenute soluzioni che le completano, oppure soluzioni alternative e/o con spiegazioni più approfondite: Soluzione.txt
Beta Was this translation helpful? Give feedback.
All reactions