2013-07-28 4 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 두 개의 레지스터가 아닌 레지스터 값을 비교 할 것으로 예상하고 그 편지에 대한 함수로 이동합니다. 문자를 읽을 수 있고 두 번째 레지스터에 가능한 일치 항목을로드 한 다음 this thread에 설명 된대로 beq을 실행할 수 있습니다.

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

당신은 더 많거나 적은 같은 방법으로 각각의 비교를 실행할 수 있습니다 : 당신이 $ V0에 문자를 캡처 한 가정 할

,이 같은 비교 뭔가를 실행할 수 있습니다.

다른주의 사항 : 입력 syscall은 opcode 8을 사용하고 있지만 this page은 문자열로 읽는다고합니다. 단일 문자로 읽으려면 opcode 12을 사용해야합니까?

+0

그러면 다음과 비슷할 것입니다. – swimmerbhs

+0

위의 답에 샘플 코드를 추가했습니다. – rutter

관련 문제