2016-09-18 7 views
0
## Question: 
## Swap each pair of elements in 
## the string "chararray" and 
## print the resulting string. 
## There will always be an even number 
## of characters in "chararray". 
## 
## Output format must be: 
## "badcfe" 

################################################# 
#      # 
#  text segment   # 
#      # 
################################################# 

    .text  
     .globl main 
main:  # execution starts here 

# Any changes above this line will be discarded by 
# mipsmark. Put your answer between dashed lines. 
#-------------- start cut ----------------------- 

la $t1, chararray 
la $t2, chararray 


nextCh: lb $t0, ($t1) # get a byte from string 
     lb $t3, ($t2) #get a byte from string 


     beqz $t0, strEnd #zero means end of string 

     add $t2, 1 
     sb $t3, ($t1) 
     sb $t0, ($t2) 
     add $t1, 1 

     j nextCh 

strEnd: la $a0, chararray 
     li $v0, 4 
     syscall 


     li $v0, 10 
     syscall 


#-------------- end cut ----------------------- 
# Any changes below this line will be discarded by 
# mipsmark. Put your answer between dashed lines. 

################################################# 
#            # 
#    data segment     # 
#            # 
    ################################################# 

     .data 
chararray: 
    .asciiz "abcdef" 
endl: .asciiz "\n" 

## 
## End of file loop4.a 

나는이 물건에 아주 익숙하다. 내가 제대로 배열을 통해 사이클링 아니에요 아니면 내가 잘못 명령을 사용하고있는 것 같아요. 너 생각 하는게 뭐야? 아이디어 있니? 프로그램이 계속 충돌합니다.제 출력물과 프로그램이 충돌하면서 많은 것을 얻습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+1

. 그게 당신이 추락 한 명령을 알려주고, 당신이 regs/mem을 검사하게하십시오. 한 번에 하나의 명령을 한 단계 씩 실행할 수도 있습니다. 디버거없이 asm을 작성하는 것은 눈을 가리는 동안 로봇을 만드는 것과 같습니다. 즉, 프로그램이 어떻게 실패하는지 정확하게 설명하는 작업을 수행했고 몇 가지 코멘트가 있었기 때문에 코드를 디버그하려는 사람이 매우 쉽게 대답 할 수 있습니다. –

+0

물론 코드가 SPIM/MARS에서 실행되도록 작성되었으므로 시뮬레이터에는 사용자가 사용하기를 기다리는 내장 된 시뮬레이터가 있기 때문에 디버거를 찾을 필요조차 없습니다. – Michael

답변

0

이 시도 : 당신이 잘못하고있는 것은 디버거를 사용하지 않는

 la $t3, chararray 
nextCh: 
     lb $t0, 0($t3) # even byte 
     lb $t1, 1($t2) # odd byte 

     beqz $t0, strEnd # end of string? 

     sb $t0, 1($t3) # swap bytes 
     sb $t1, 0($t3) 

     add $t3, 2  # advance by 2 bytes 
     b nextCh