というタイトルでは、Mars MIPSシミュレータでこのコードを記述し、そこにコードを組み立てて実行してもエラーは発生しません。私はQtSpimに同じファイルを取ると、そこにそれを実行すると、私は次のエラーを取得する:ケースステートメントコードはMarsシミュレータで実行されますが、QtSpimのエラー
Instruction references undefined symbol at 0x00400014 [0x00400014] 0x0c000000 jal 0x00000000 [main] ; 188: jal main
はQtSpimは私がCASE
のラベルのアドレスを呼び出して、私は理由を見るには十分経験していないよとの問題を持っているようです。ここに私のコードです:
.data
jumptable: .word isD, is1, is2, is3, is4
currentvalue: .asciiz "Returned : i = " #Used for result output
space: .asciiz " \n" #Used for result output
.text
MAIN:
li $a0, 0 #testing use of the argument register toholdinput
jal CASE #set $ra and go to the case procedure
li $v0, 4 #load syscall 4 to print text
la $a0, currentvalue #load the string value of currentvalue into $a0
syscall #print out currentvalue
li $v0, 1 #load syscall 1 to print integer
move $a0, $t3 #move the contents of $t3 to $a0
syscall #print the integer in $a0
li $v0, 10 #load syscall 10 to exit program
syscall #exit program
CASE:
la $t3, ($a0) #load 'i' into a temporary value since we will be using $a0 for syscalls shortly
blt $a0, 1, isD #jump to default if i less than 1
bgt $a0, 4, isD #jump to default if i greater than 4
sll $t0, $a0, 2 #multiplies 'i' by 2^2
la $t1, jumptable #load the base address of the jump table into $t1
add $t1, $t1, $t0 #$t1 = $t1(base address of table) + $t0('i' * 4)
lw $t2, ($t1) #$t2 is loaded with the address of label found in $t1
jr $t2
is1:
addi $t3, $t3, 1 #increment 'i' by 1
jr $ra #jump back to the return address in main
is2:
addi $t3, $t3, 2 #increment 'i' by 2
jr $ra #jump back to the return address in main
is3:
addi $t3, $t3, 3 #increment 'i' by 3
jr $ra #jump back to the return address in main
is4:
addi $t3, $t3, 4 #increment 'i' by 4
jr $ra #jump back to the return address in main
isD:
li $t0, 0 #set 'i' to 0
jr $ra #jump back to the return address in main
私はSPIMは大文字と小文字が区別され、あなたのコードだけ 'MAIN'を定義しながら、main''へジャンプみる疑います。 – EOF
Wow、spot on、MainとCASEの両方をメインとケースに変更し、出力を得ました。ありがとうございました! –