【问题标题】:MIPS: menu selection not working.MIPS:菜单选择不起作用。
【发布时间】:2013-07-28 00:38:11
【问题描述】:

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

【问题讨论】:

    标签: mips


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 会是这样吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2012-07-22
    • 1970-01-01
    • 2014-02-01
    • 2017-01-22
    • 1970-01-01
    • 2015-03-13
    相关资源
    最近更新 更多