2012-12-20 2 views
1

저는 mips32로 시작하고 있습니다. 문자열을 인쇄 할 때 문자를 가져 오려고 할 때 막혀 있습니다. 코드는 문자열을 가져 와서 문자로 문자를 인쇄하고 i 인쇄 iiing을 찾을 때 문자열을 출력해야합니다.바이트를 mips32에로드하십시오.

.data 
msg: .asciiz "testing" 
i: .asciiz "iiing" 

.text 

.globl main 

main:   
    la $t0, msg 
    la $t1, i 
    li $t2, 0 
loop: 
    bneq $t0, 105, end #$t0=i? 
    lb $a0, ($t0) 
    li $v0, 4 
    syscall 
    addi $t0, $t0, 1 
    b loop 

end: 
    move $a0, $t1 
    li $v0, 4 
    syscall 

어디에서 문제가 발생합니까?

답변

0

몇 가지 문제점이 있습니다.

  1. 당신은 현재 문자의 주소가 아닌 문자 자체 인 $t0을 비교된다. 해당 테스트를 lb 행 아래로 이동하고 $a0을 테스트하십시오.

  2. 105은 ASCII 형식이 i이 아니라 E입니다. 151을 시도하거나 (보다 정상적인 경우 0x69) 시도하십시오.

  3. beq (bneq이 아님)과 비교하고 싶습니다.

  4. 루프 내에서 문자열을 인쇄하는 현재 시스템 호출 4이 아닌 단일 문자를 인쇄하는 syscall 11을 사용해야합니다.

  5. 프로그램 종료시 시스템 종료 (10)가 없습니다.

시스템 콜리스트는 this link에서 확인할 수 있습니다. 단지 내가 missunderstood, 당신은 같은 의미 했 한 경우에, 실제로

.data 

msg: .asciiz "testing" 
i: .asciiz "iiing" 

    .text 
    .globl main 

main:   
    la $t0, msg 
    la $t1, i 
    li $t2, 0 

loop: 
    lb $a0, ($t0) 
    beq $a0, 0x69, end 
    li $v0, 11 
    syscall 
    addi $t0, $t0, 1 
    b loop 

end: 
    move $a0, $t1 
    li $v0, 4 
    syscall 
    li $v0, 10 
    syscall 
+0

, 당신이 바로,하지만하고 난 여전히 지선에 에로를 얻을 수정하는 것이 : 여기

참조를위한 완벽한 작업 프로그램의 이? 루프 : \t \t lb $ a0, ($ t0) \t \t bneq $ a0, 0x69, end # $ t0 = i? \t \t \t \t \t 리 $의 V0, 4 \t \t \t 콜 \t \t \t ADDI의 $ t0의, $ t0의 1 개 \t \t \t B 루프 가까이 보이는 – qwerty

+0

,하지만 당신은 아마 원하는'beq', 지금 내가 자세히 살펴. 아마도 당신이하고있는 작업 ('$ a0' 대'$ t0')에 맞게 주석을 업데이트해야합니다. –

+0

그래, 사실,하지만 여전히 파운드로 문자를 감지하지 않는다는 뜻이다. (null) null ..iiing, 왜 그런지 생각해? 미안 많은 바보 같은 질문에 대해 .. – qwerty