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レジスタと値ではなく、2 つのレジスタを比較することを想定しています。このスレッドbeqで説明されているように、文字を読み取り、一致する可能性のあるものを 2 番目のレジスタにロードしてから、 を実行できます。

キャラクターを $v0 にキャプチャしたと仮定すると、次のような比較を実行できます。

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

各比較はほぼ同じ方法で実行できます。

もう 1 つ気付きました: 入力 syscall は opcode を使用しています8が、このページでは、文字列を読み取るように指定されています。オペコード12を使用して単一の文字を読み取る必要がありますか?

于 2013-07-28T00:46:23.167 に答える