feat: Initial commit
This commit is contained in:
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