Программа MIP для обращения строки с помощью стека и подсчета символов в строке - PullRequest
0 голосов
/ 05 марта 2020

Я получаю пару ошибок при запуске моей программы.

  1. исключение произошло в P C
  2. Неверный адрес в чтении данных / стека:
  3. Ссылка на инструкцию содержит неопределенный символ
  4. Исключение 7 (Плохо адрес данных) произошел и проигнорирован

Программа

#prog2
#Mips prog to print string that will be reversed with using stack
#and using a counter to count amount of characters in given string

.data
str: .asciiz "String to be reversed : \n" 
msg: .asciiz "Education is the most powerful weapon for which you can change the world  -nelson mandela" 
ans: .asciiz "The string reversed is : " 
count: .asciiz "\n\nThe number of characters in a given string is= "

.text
.globl main
main: 

печать строки

 la $a0, str         
    li $v0, 4 
    syscall

печать строки

la $a0, msg            
li $v0, 4
syscall

загрузить строка, подлежащая обращению

 la $t0, msg   

загрузить char из msg, если нулевой конец цикла уменьшает указатель стека, хранит t0 в стек, получает следующий символ

   loop:
    lb $t0, 0 ($t0)       
    beqz $t0, stringEnd   
    addi $sp, $sp -1      
    sb $t0, 0 ($sp)       
    addi $t1, $t1, 1      
    j loop
    stringEnd:

la $t1, msg1

storeLoop:
lb $t0, 0($t0)
beqz $t0, end
lb $t4, 0($sp)
sb $t4, 0 ($t0)
addi $t1, $t1, 1
addi $sp, $sp, 1
j storeLoop
end:

countloop:
lb $t2, 0($t1) 
beqz $t2, countend
addi $t0, $t0, 1
addi $t1, $t1, 1
j countloop
countend:

la $a0, count
li $v0, 4
syscall

la $a0, ans
li $v0, 4 
syscall

move $a0, $t4
li $v0, 4
syscall

li $v0, 10 
syscall
...