1
0

feat: Initial commit

This commit is contained in:
2024-03-22 13:53:19 +01:00
parent 44aa2938a2
commit 2a54d9dbc2
34 changed files with 1475 additions and 0 deletions

View 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

View 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
View 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
View 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