2013-07-28 102 views
0

有這個代碼的小問題,它qtspim它說我想比較的字母將與系統調用讀入這些功能,我比較字符串h $ v0,因爲如果它是相等的,那麼它會去功能那封信MIPS:菜單選擇不起作用。

Instruction references undefined symbol at 0x004000dc [0x004000dc] 0x10220000 beq $1, $2, 0 [menu-0x004000d8]

la $a0, menu1 
syscall        #print menu1 

la $a0, menu2 
syscall        #print menu2 

la $a0, menu3 
syscall        #print menu3 

la $a0, menu4 
syscall        #print menu4 

la $a0, menu5 
syscall        #print menu5 

la $a0, menu6 
syscall        #print menu6 

la $a0, menu7 
syscall        #print menu7 

la $a0, menu8 
syscall        #print menu8 

la $a0, menu9 
syscall        #print menu9 

la $a1, mselc      #print mselc 
syscall 

li $v0, 8 
syscall 

j select       #jump to select function 

select: 
beq $v0, 'h', menu     
beq $v0, 'a', speed_add 
beq $v0, 'd', speed_sub 
beq $v0, 'p', passenger_add 
beq $v0, 'r', passenger_remove 
beq $v0, 'w', wiper 
beq $v0, 'i', headlight_in 
beq $v0, 'd', headlight_de 
beq $v0, 't', turn1 
j main 

回答

0

beq預計要比較兩個寄存器,而不是一個寄存器中的值。您可以讀入一個字符,將可能的匹配加載到第二個寄存器中,然後運行beq,如this thread中所述。

假如你捕獲一個字符爲$ V0,你可以運行的比較是這樣的:

li $t0, 104 #'h' 
beq $t0, $v0, menu 

可以或多或少以同樣的方式運行的每個比較。

我注意到另一件事:您的輸入系統調用使用操作碼8,但this page表示這是讀取字符串。您是否應該使用操作碼12來讀取單個字符?

+0

它看起來像這樣然後 – swimmerbhs

+0

我在上面的答案中添加了一些示例代碼。 – rutter