Ошибка MIPS при обнаружении завершающего нулевого символа

Немного предыстории: это приложение предназначено для того, чтобы взять строку и для каждого символа добавить ключ (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]

Может ли кто-нибудь найти причину, по которой этот код будет манипулировать этим последним символом и превращать его в закрывающую скобку? Спасибо.


person Archibald    schedule 25.02.2014    source источник
comment
Как вы обозначаете строку? У меня это работает нормально, поэтому я подозреваю, что используемая вами строка не завершается нулем.   -  person Konrad Lindenbach    schedule 25.02.2014


Ответы (1)


Оказывается, строка завершалась правильно, но я не видел возврата каретки в конце строки, введенной в консоль. Как только я это учел, я смог избавиться от таинственного персонажа.

person Archibald    schedule 27.02.2014