102 lines
3.2 KiB
NASM
102 lines
3.2 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:
|
|
subu $sp, $sp, 4
|
|
sw $ra, ($sp)
|
|
|
|
# Calcolo cognome e nome
|
|
move $t0, $a3 # destinazione
|
|
addiu $t1, $t0, 6 # puntatore termine
|
|
addiu $t2, $t0, 3 # puntatore swap
|
|
move $t3, $a0 # parola
|
|
|
|
loop_lettere:
|
|
# salto delle vocali
|
|
lb $t4, 0($t3)
|
|
beq $t4, 'A', next
|
|
beq $t4, 'E', next
|
|
beq $t4, 'I', next
|
|
beq $t4, 'O', next
|
|
beq $t4, 'U', next
|
|
|
|
# aggiungo carattere
|
|
sb $t4, 0($t0)
|
|
addiu $t0, $t0, 1
|
|
|
|
next:
|
|
bne $t0, $t2, incr
|
|
# cambio source al nome
|
|
move $t3, $a1
|
|
j en
|
|
incr:
|
|
addiu $t3, $t3, 1
|
|
en:
|
|
bne $t0, $t1, loop_lettere
|
|
|
|
# Copio la data
|
|
move $t1, $a2
|
|
lb $t2, ($t1)
|
|
sb $t2, ($t0)
|
|
lb $t2, 1($t1)
|
|
sb $t2, 1($t0)
|
|
|
|
# Inserisco mese
|
|
addiu $t0, $t0, 2
|
|
addiu $t1, $t1, 2
|
|
lw $a0, ($t1)
|
|
andi $a0, $a0, 0x0000FFFF
|
|
jal MonthToChar
|
|
sb $v0, ($t0)
|
|
|
|
lb $t2, 2($t1)
|
|
sb $t2, 1($t0)
|
|
lb $t2, 3($t1)
|
|
sb $t2, 2($t0)
|
|
|
|
# calcolo parity bit
|
|
move $t0, $a3 # iteratore codice
|
|
addiu $t1, $t0, 12 # puntatore termine
|
|
li $t2, 0
|
|
|
|
parity:
|
|
lb $t3, ($t0)
|
|
xor $t2, $t2, $t3
|
|
addiu $t0, $t0, 1
|
|
bne $t0, $t1, parity
|
|
sb $t2, ($t0)
|
|
|
|
lw $ra, ($sp) # ripristina $ra
|
|
addu $sp, 4 # ripristina $sp
|
|
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, 'H'
|
|
jr $ra
|
|
.end MonthToChar |