.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