92 lines
1.6 KiB
NASM
92 lines
1.6 KiB
NASM
.data
|
|
cognome:.asciiz "ROSSI"
|
|
nome:.asciiz "GENNARO"
|
|
data:.asciiz "120892"
|
|
CF:.space 12
|
|
|
|
.text
|
|
.globl main
|
|
.ent main
|
|
main:
|
|
subu $sp, $sp, 4
|
|
sw $ra, ($sp)
|
|
la $a0, cognome
|
|
la $a1, nome
|
|
la $a2, data
|
|
la $a3, CF
|
|
jal CalcoloCF
|
|
lw $ra, ($sp)
|
|
addiu $sp, $sp, 4
|
|
jr $ra
|
|
.end main
|
|
|
|
.ent CalcoloCF
|
|
CalcoloCF:
|
|
# Calcolo cognome
|
|
li $t0, 0
|
|
move $t2, $a0
|
|
genC:
|
|
# salto delle vocali
|
|
lb $t3, 0($t2)
|
|
beq $t3 'A', next
|
|
beq $t3 'E', next
|
|
beq $t3 'I', next
|
|
beq $t3 'O', next
|
|
beq $t3 'U', next
|
|
|
|
# aggiungo carattere
|
|
sb $t3, 0($a3)
|
|
addiu $a3,$a3,1
|
|
addiu $t0,$t0,1
|
|
|
|
next:
|
|
addiu $t2,$t2,1
|
|
bne $t0, 3, genC
|
|
|
|
# Calcolo nome
|
|
li $t0, 0
|
|
move $t2, $a1
|
|
genC1:
|
|
# salto delle vocali
|
|
lb $t3, ($t2)
|
|
beq $t3 'A', next1
|
|
beq $t3 'B', next1
|
|
beq $t3 'C', next1
|
|
beq $t3 'D', next1
|
|
beq $t3 'E', next1
|
|
|
|
# aggiungo carattere
|
|
sb $t3, ($a3)
|
|
addiu $a3,$a3,1
|
|
addiu $t0,$t0,1
|
|
|
|
next1:
|
|
addiu $t2,$t2,1
|
|
bne $t0, 3, genC1
|
|
|
|
# Copio data
|
|
move $t0, $a2
|
|
lb $t1, ($t0)
|
|
sb $t1, ($a3)
|
|
lb $t1, 1($t0)
|
|
sb $t1, 1($a3)
|
|
|
|
addiu $t0,$t0,4
|
|
addiu $a3,$a3,4
|
|
lb $t1, ($t0)
|
|
sb $t1, ($a3)
|
|
lb $t1, 1($t0)
|
|
sb $t1, 1($a3)
|
|
|
|
jr $ra
|
|
.end CalcoloCF
|
|
|
|
.ent MonthToChar
|
|
MonthToChar:
|
|
# Parametro in ingresso $a0 = 2 CARATTERI ESTRATTI DALLA DATA
|
|
# (esempio: "01" per Gennaio)
|
|
# Parametro in uscita $v0 = "A" per l'esempio di Gennaio
|
|
# codice della procedura da non sviluppare
|
|
li $v0, 'X'
|
|
jr $ra
|
|
.end MonthToChar |