2013-07-28 2 views
0

Имея небольшую проблему с этим кодом, это qtspim, это говорит, что я пытаюсь сравнить буквы, которые будут прочитаны с помощью syscall для этих функций, я сравниваю строку 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 

Вы можете запустить каждое сравнение более или менее одинаково.

Еще одна вещь, которую я замечаю: ваш syscall ввода использует код операции 8, но this page говорит, что это нужно читать в строке. Должен ли использоваться код операции 12 для чтения в одном символе?

+0

будет выглядеть примерно так, а затем – swimmerbhs

+0

Я добавил несколько примеров кода к моему ответу выше. – rutter

Смежные вопросы