Немного предыстории: это приложение предназначено для того, чтобы взять строку и для каждого символа добавить ключ (1-26) к значению ascii и поместить его обратно в строку. Единственная проблема заключается в том, что моим конечным символом всегда манипулируют, даже если моя программа предназначена для завершения на нулевых символах (beqz).
encrypt:
# store string address in $t0
la $t0, ($a0)
#store key in $t1
move $t1, $a1
# initialize index, $t2 to 0
add $t2, $zero, $zero
li $t4, 26
encrypt_loop:
# load the byte at index in $t3
lb $t3, ($t0)
# check if it's the end of the string
beqz $t3, encrypt_end
# also check if it's a space
beq $t3, 32, incr
# subtract to make a = 0 etc
addi $t3, $t3, -97
# add key
add $t3, $t3, $t1
# modulo to make sure that it isn't over 26
div $t3, $t4
mfhi $t3
# add 97 back to get it back to its position
addi $t3, $t3, 97
# store byte back where you found it
sb $t3, ($t0)
#la $a0, ($t3)
#jal _put_char
incr:
# increment address
la $t0, 1($t0)
#jump back to beginning of the loop
j encrypt_loop
Пример ->
Введите сообщение: очень счастлив
Введите ключ: 5
Зашифрованное сообщение: xzujw mfuud]
Может ли кто-нибудь найти причину, по которой этот код будет манипулировать этим последним символом и превращать его в закрывающую скобку? Спасибо.