51 lines
1.7 KiB
NASM
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 |