Привет, ребята, я пишу программу mips для комп. архипелаг класс, который я принимаю. Профессор спросил нас:Печать соответствующего значения ascii из введенных ints
строки четыре целых чисел, которые находятся между 65 и 90 включительно, а затем распечатывают строку из 4 символов ASCII, соответствующих на вход целых числа. Например, если пользовательские входы «65 66 67 и 68», программа будет печатать «ABCD». Предполагая, что у нас есть только syscall # 4 и не есть syscall # 11.
Я добавил код ниже, всякий раз, когда я запускаю его, я получаю исключение Runtime в 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
Спасибо, что это сработало отлично. :) – Horrerblade