MIPS:菜单选择不起作用。

时间:2013-07-28 00:38:11

标签: mips

这个代码有点问题,它说qtspim它说我试图比较将与系统调用读入的字母与那些函数,我将字符串h与$ v0进行比较,因为如果它是相等的那么它将去那封信的功能

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

1 个答案:

答案 0 :(得分:0)

beq期望比较两个寄存器,而不是寄存器和值。您可以读取一个字符,将可能的匹配加载到第二个寄存器中,然后运行beq,如this thread中所述。

假设你已经将一个角色捕获到$ v0中,你可以运行这样的比较:

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

您可以或多或少地以相同的方式运行每个比较。

我注意到另一件事:您的输入系统调用使用操作码8,但this page表示要读取字符串。您是否应该使用操作码12来读取单个字符?