1
0
Files
Laboratori-MIPS/Temi esame/codFmeglio.asm
2024-03-22 13:53:19 +01:00

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