70 lines
1.5 KiB
NASM
70 lines
1.5 KiB
NASM
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 |