2013-07-28 62 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