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

51 lines
1.7 KiB
NASM

la $s0, plaintext
la $s1, key
la $s2, len
la $s3, chipertext
.ent cifrarioVigenere
cifrarioVigenere:
li $t0, 0 # counter current char
li $t1, 0 # counter modulo char
li $v0, 0 # current encoded chars
# i registri da $t3 in poi in poi possono essere usati liberamente nel loop
loop:
addu $t3, $s0, $t0
lb $t3, 0($t3)
bne $t3, 0, end # termina se null byte
# controllo se lettera è minuscola
blt $t3, 'z', copy # se maggiore di
bgt $t3, 'a', copy # se minore di
addu $4, $s1, $t1 # risolvo indirizzo carattere chiave
lw $t4, 0($t4) # carico in memoria
sub $t4, $t4, 'a'
addu $t3, $t3, $t4 # eseguo la codifica
ble $t3, 'z', copy
sub $t1, $t1, 'z', +,1
add $t1, $t1, 'a'
copy:
addu $t4, $s3, $t0
sw $t3, 0($t4) # salvo nel chipertext
bne $t1, $s2, increment_modulo
addiu $t1, $0, 0 # resetto contatore modulo
j cont
increment_modulo:
addiu $t1, $t1, 1 # incremento contatore modulo
cont:
addi $t0, $t0, 1 # incremento contatore carattere
j loop # jump to loop
end:
jr $ra
.end cifrarioVigenere