0

这段代码有一点问题,它 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
4

1 回答 1

0

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

假设您已将一个字符捕获到 $v0 中,您可以运行如下比较:

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

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

我注意到的另一件事:您的输入系统调用正在使用 opcode 8,但此页面说这是读取字符串。您是否应该使用操作码12读取单个字符?

于 2013-07-28T00:46:23.167 回答