feat: Initial commit
This commit is contained in:
70
Laboratorio9/bisestile.asm
Normal file
70
Laboratorio9/bisestile.asm
Normal file
@@ -0,0 +1,70 @@
|
||||
LUNG =, 6
|
||||
.data
|
||||
anni: .word 1945, 2008, 1800, 2006, 1748, 1600
|
||||
ris: .space LUNG
|
||||
.text
|
||||
.globl main
|
||||
.ent main
|
||||
main:
|
||||
la $a0, anni
|
||||
la $a1, ris
|
||||
li $a2, LUNG
|
||||
jal bisestile
|
||||
li $v0, 10 # codice per uscita dal programma
|
||||
syscall # fine
|
||||
.end main
|
||||
|
||||
.ent bisestile
|
||||
bisestile:
|
||||
addi $sp, $sp, -4
|
||||
sw $ra, ($sp)
|
||||
|
||||
li $s0, 0
|
||||
sll $a2, $a2, 2
|
||||
addu $s1, $a0, $a2
|
||||
move $s2, $a0
|
||||
move $s3, $a1
|
||||
|
||||
loop:
|
||||
lw $a0, ($s2)
|
||||
jal bisestileS
|
||||
beq $v0, $0, skip
|
||||
addiu $s0, $s0, 1
|
||||
skip:
|
||||
sb $v0, ($s3)
|
||||
|
||||
addiu $s2, $s2, 4
|
||||
addiu $s3, $s3, 1
|
||||
bne $s2, $s1, loop
|
||||
|
||||
move $v0, $s0
|
||||
lw $ra, ($sp)
|
||||
addi $sp, $sp, 4
|
||||
jr $ra
|
||||
.end bisestile
|
||||
|
||||
.ent bisestileS
|
||||
bisestileS:
|
||||
# anno in $a0
|
||||
li $t0, 400
|
||||
div $a0, $t0
|
||||
mfhi $t0
|
||||
beq $t0, 0, bis
|
||||
|
||||
li $t0, 100
|
||||
div $a0, $t0
|
||||
mfhi $t0
|
||||
beq $t0, 0, nbis
|
||||
|
||||
li $t0, 4
|
||||
div $a0, $t0
|
||||
mfhi $t0
|
||||
beq $t0, 0, bis
|
||||
|
||||
nbis:
|
||||
li $v0, 0
|
||||
jr $ra
|
||||
bis:
|
||||
li $v0, 1
|
||||
jr $ra
|
||||
.end bisestileS
|
||||
46
Laboratorio9/costoparcheggio.asm
Normal file
46
Laboratorio9/costoparcheggio.asm
Normal file
@@ -0,0 +1,46 @@
|
||||
.data
|
||||
ora_in: .byte 12, 47
|
||||
ora_out: .byte 18, 14
|
||||
X: .byte 1
|
||||
Y: .byte 40
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.ent main
|
||||
main:
|
||||
la $a0, ora_in # indirizzo di ora_in
|
||||
la $a1, ora_out # indirizzo di ora_out
|
||||
lbu $a2, X
|
||||
lbu $a3, Y
|
||||
jal costoParcheggio
|
||||
li $v0, 10 # codice per uscita dal programma
|
||||
syscall # fine
|
||||
.end main
|
||||
|
||||
.ent costoParcheggio
|
||||
costoParcheggio:
|
||||
# Calcolo minuti nel parcheggio in $t0
|
||||
li $t0, 60
|
||||
lbu $t1, ($a0)
|
||||
lbu $t2, ($a1)
|
||||
subu $t1, $t2, $t1
|
||||
multu $t0, $t1
|
||||
mflo $t0
|
||||
|
||||
lb $t1, 1($a0)
|
||||
lb $t2, 1($a1)
|
||||
addu $t0, $t0, $t2
|
||||
sub $t0, $t0, $t1
|
||||
|
||||
divu $t0, $a3
|
||||
mflo $t0
|
||||
mfhi $t1
|
||||
|
||||
beq $t1, $0, compl
|
||||
addiu $t0, $t0, 1
|
||||
compl:
|
||||
|
||||
multu $t0, $a2
|
||||
mflo $v0
|
||||
jr $ra
|
||||
.end costoParcheggio
|
||||
47
Laboratorio9/hamming.asm
Normal file
47
Laboratorio9/hamming.asm
Normal file
@@ -0,0 +1,47 @@
|
||||
DIM =, 5
|
||||
.data
|
||||
vet1: .word 56, 12, 98, 129, 58
|
||||
vet2: .word 1, 0, 245, 129, 12
|
||||
risultato: .space DIM
|
||||
.text
|
||||
.globl main
|
||||
.ent main
|
||||
main:
|
||||
la $a0, vet1
|
||||
la $a1, vet2
|
||||
la $a2, risultato
|
||||
li $a3, DIM
|
||||
jal CalcolaDistanzaH
|
||||
li $v0, 10 # codice per uscita dal programma
|
||||
syscall
|
||||
.end main
|
||||
|
||||
.ent CalcolaDistanzaH
|
||||
CalcolaDistanzaH:
|
||||
sll $a3, $a3, 2
|
||||
addu $t0, $a0, $a3
|
||||
|
||||
loop:
|
||||
lw $t1, ($a0)
|
||||
lw $t2, ($a1)
|
||||
xor $t1, $t1, $t2
|
||||
li $t2, 0
|
||||
li $t3, 0
|
||||
|
||||
iloop:
|
||||
andi $t4, $t1, 0x0001
|
||||
addu $t2, $t2, $t4
|
||||
srl $t1, $t1, 1
|
||||
addiu $t3, $t3, 1
|
||||
bne $t3,8, iloop
|
||||
|
||||
sw $t2, ($a2)
|
||||
|
||||
# incremento
|
||||
addiu $a0, $a0, 4
|
||||
addiu $a1, $a1, 4
|
||||
addiu $a2, $a2, 4
|
||||
bne $a0, $t0, loop
|
||||
|
||||
jr $ra
|
||||
.end CalcolaDistanzaH
|
||||
62
Laboratorio9/sconto.asm
Normal file
62
Laboratorio9/sconto.asm
Normal file
@@ -0,0 +1,62 @@
|
||||
NUM =, 5
|
||||
DIM =, NUM, *, 4
|
||||
SCONTO =, 30
|
||||
ARROTONDA=1
|
||||
.data
|
||||
prezzi: .word 39, 1880, 2394, 1000, 1590
|
||||
scontati: .space DIM
|
||||
.text
|
||||
.globl main
|
||||
.ent main
|
||||
main:
|
||||
la $a0, prezzi
|
||||
la $a1, scontati
|
||||
li $a2, NUM
|
||||
li $a3, SCONTO
|
||||
li $t0, ARROTONDA
|
||||
subu $sp, 4
|
||||
sw $t0, ($sp)
|
||||
jal calcola_sconto
|
||||
li $v0, 10 # codice per uscita dal programma
|
||||
syscall # fine
|
||||
.end main
|
||||
|
||||
.ent calcola_sconto
|
||||
calcola_sconto:
|
||||
addiu $sp, $sp, -4 # crea spazio per lo stack
|
||||
sw $fp, ($sp) # memorizza frame pointer
|
||||
move $fp, $sp # il nuovo frame pointer è lo stack pointer precedente
|
||||
|
||||
move $t0, $a0 # pointer prezzi
|
||||
move $t1, $a1 # pointer scontati
|
||||
sll $t2, $a2, 2 # moltiplica per 4 (stiamo lavorando con delle
|
||||
addu $t2, $t0, $t2 # pointer fine prezzi
|
||||
li $t5, 100 # fattore per dividere
|
||||
sub $t3, $t5, $a3 # fattore moltiplicativo
|
||||
lw $t4, 4($fp) # flag approssima
|
||||
|
||||
move $v0, $0 # totale scontato
|
||||
|
||||
loop:
|
||||
lw $t8, ($t0) # carica prezzo dalla memoria
|
||||
mul $t6, $t8, $t3 # moltiplica per fattore
|
||||
divu $t6, $t5 # dividi
|
||||
mflo $t6 # carica quoto
|
||||
beqz $t4, salva # salta al salvataggio se la flag arrotonda è zero
|
||||
mfhi $t7 # carica resto
|
||||
blt $t7, 50, salva # salta al salvataggio se il resto è minore di 50
|
||||
addiu $t6, $t6, 1 # arrotonda per eccesso
|
||||
salva:
|
||||
sw $t6, ($t1) # salva in memoria
|
||||
subu $t6, $t8, $t6
|
||||
addu $v0, $v0, $t6 # aggiorna totale
|
||||
|
||||
addiu $t0, $t0, 4 # incrementa pointer prezzi
|
||||
addiu $t1, $t1, 4 # incrementa pointer scontati
|
||||
bne $t0, $t2, loop
|
||||
|
||||
lw $fp, ($sp) # carica lo stack pointer salvato
|
||||
move $sp, $fp # ripristinalo
|
||||
addiu $sp, $sp, 4 # pop stack
|
||||
jr $ra
|
||||
.end calcola_sconto
|
||||
Reference in New Issue
Block a user