こんにちは、コンプ用の mips プログラムを書いています。アーチ。私が取っているクラス。教授は私たちに次のように求めました。
65 から 90 までの 4 つの整数の入力を求めるプロンプトが表示され、入力された整数に対応する 4 つの ASCII 文字の文字列が出力されます。たとえば、ユーザーが「65 66 67 and 68」と入力すると、プログラムは「ABCD」と出力します。syscall #4 のみがあり、syscall #11 はないと仮定します。
以下にコードを追加しました。これを実行するたびに、エラーとして 0x004000e8 でランタイム例外が発生します。私が間違っていることへの助けは素晴らしいでしょう、ありがとう。
.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