Привет, ребята, я пишу программу mips для компа. арка. класс, который я беру. Профессор попросил нас:
запросить четыре целых числа от 65 до 90 включительно, затем распечатать строку из 4 символов ASCII, соответствующую входным целым числам. Например, если пользователь вводит «65 66 67 и 68», программа напечатает «ABCD». Предполагая, что у нас есть только системный вызов №4 и нет системного вызова №11.
Я добавил свой код ниже, всякий раз, когда я запускаю его, я получаю исключение времени выполнения по адресу 0x004000e8: адрес вне диапазона 0x00000041 как ошибка. Любая помощь в том, что я делаю неправильно, была бы замечательной, спасибо.
.data #data Segment
stringMsg: .asciiz "Enter 4 integers that are between 65-90, inclusive: "
#Stores string in data segment + null terminator
alphaTable: .byte 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
.text
string:
li $v0, 4 #Syscall #4 prints string
la $a0, stringMsg #Loads address of string "inputMsg"
syscall #Prints inputMsg
li $v0, 5 #Syscall #5 reads integer
syscall #reads inputted val into $v0
la $s0, ($v0) #save first number into s0
li $v0, 5 #Syscall #5 reads integer
syscall #reads inputted val into $v0
la $s1, ($v0) #save second number into s1
li $v0, 5 #Syscall #5 reads integer
syscall #reads inputted val into $v0
la $s2, ($v0) #save third number into s2
li $v0, 5 #Syscall #5 reads integer
syscall #reads inputted val into $v0
la $s3, ($v0) #save fourth number into s3
sub $s0, $s0, 65 #Subtract 65 from the 4 # to get correlating value in array
sub $s1, $s1, 65
sub $s2, $s2, 65
sub $s3, $s3, 65
la $s4, alphaTable #Loads table into $s4 (used to get index val)
la $s5, alphaTable #Loads table into $s5 (used to reset index val)
add $s5, $s5, $s0
li $v0, 4 #Syscall #4 prints string
lb $a0, ($s5) #Loads address of string "inputMsg"
syscall #Prints inputMsg
la $s5, ($s4)
add $s5, $s5, $s1
li $v0, 4 #Syscall #4 prints string
lb $a0, ($s5) #Loads address of string "inputMsg"
syscall #Prints inputMsg
la $s5, ($s4)
add $s5, $s5, $s2
li $v0, 4 #Syscall #4 prints string
lb $a0, ($s5) #Loads address of string "inputMsg"
syscall #Prints inputMsg
la $s5, ($s4)
add $s5, $s5, $s3
li $v0, 4 #Syscall #4 prints string
lb $a0, ($s5) #Loads address of string "inputMsg"
syscall #Prints inputMsg
exit:
li $v0, 10 #syscall #10: exit
syscall #ends program