2016-06-10 2 views
3

QtSpim 9.1.16 및 9.1.17 모두를 사용해 보았습니다. 모두 입력 문자열의 처음 2자를 "잘라내어"0x0, 다른 ASCII 문자로 설정했습니다. 올바르게 버퍼에 저장됩니다.QtSpim은 문자열 읽기 후 2 개의 초기 문자를 자릅니다.

User data segment [10000000]..[10040000] 
[10000000]..[1000ffff] 00000000 
[10010000] 69676944 6c206174 74732061 676e6972 D i g i t a l a s t r i n g 
[10010010] 68632061 75762065 6320696f 72746e6f a c h e v u o i c o n t r 
[10010020] 616c6c6f 28206572 2078616d 63203031 o l l a r e (m a x 1 0 c 
[10010030] 74617261 69726574 00203a29 3433000a a r a t t e r i) : . . . 3 4 
[10010040] 00000035 00000000 00000000 00000000 5 . . . . . . . . . . . . . . . 
[10010050]..[1003ffff] 00000000 
:

예를 들어
.data    # ROM area 
    str_input: .asciiz "Digita la stringa che vuoi controllare (max 10 caratteri): " 

.data    # RAM area 
    buffer:  .space 11 

.text 
.globl main 
    main: li $v0, 4 
      la $a0, str_input 
      syscall    # syscall to print user message 
      #------ 
      la $a0, buffer 
      li $a1, 11 
      li $v0, 8 
      syscall 

내가 '12345'입력하면, 그 메모리 덤프입니다 : 그건 내가 인터넷에서 찾은 다른 코드가 같은 결과를 제공하더라도, 내 조각이다

QtSpim에 대해 빠진 것이 있습니까? 내 상위 코멘트를

+0

에서 실행 대 단계에 다소 차이가 있음을 말할 수있다. 나는 코드 리뷰를했다. 나는 syscall 4를 추가하여 버퍼를 반향시킨 다음 시스템 콜을 사용하여 프로그램을 종료했다. 싱글 스텝핑이 아니라면, 당신의 시스템 콜 11 이후에, 당신은 "세계의 가장자리에서 떨어져 나간다"(즉, 어떤 코드가 실행됩니까?). 그러나 여기에서는 데이터의 반향과 16 진 덤프 모두 예상되는 결과와 일치합니다. –

+0

저는 실제로 한 발짝 움직였습니다. 그것은 선생님이 우리에게 권고 한 내용입니다. 내가 프로그램을 정상적으로 작동하게한다면, 아무 문제가 없다. 오, 그리고 당신은 시스템 콜 10 힌트에 대해, 나는 그것을 알지 못했다. 하지만 왜 단일 스테핑이 이상한 행동을 일으키는 지 설명 할 수 있습니까? 예를 들어, MARS는 좋은 사람이고 오산하지 않습니다. – LivingSilver94

답변

1

, 나는 프로그램을 종료하기 위해 버퍼 내용과 콜 (10) 에코 시스템 콜 (4)를 추가했다.

스핌은 기발한 (재. "세상의 끝에서 떨어지는")이 될 수 있습니다. 즉, 프로그램이 올바르게 종료되지 않은 경우입니다. 나는 두 개의 시스템 콜을 추가하면

, 나는 프로그램 "전체 실행"모드에 필요하지 않은 단일 단계를위한 "소프트 랜딩 존"을했다. 따라서, 나는 실수로 스핌 시뮬레이터의 버그를 가리는 방식으로 프로그램을 잘못 작성했다.

정확히 프로그램으로 되 돌렸을 때, 문제를 재현 할 수있었습니다. spim인 경우 인 경우 텍스트 세그먼트의 마지막 명령이 단일 단계에서 비 종료 syscall 인 것으로 나타납니다.

[도]는 nop 당신의 콜 이후 11 수정 문제를 추가.


내가 모두를 사용했지만, 내가 mars을 선호 : http://courses.missouristate.edu/KenVollmar/MARS/ 그것은 훨씬 더 조직 디버그/단일 단계, 진단 메시지, bkpts, 데이터 뷰를 설정하는 것입니다 - YMMV.

이전에 두 시뮬레이터 모두에 대한 소스를 다운로드하고 해킹 했었습니다. 일부 정리 작업을 수행하고 일부 기능을 추가했습니다. 저는 원래의 저자는 아니지만 코드에 대해 어느 정도 익숙해졌습니다.

내가 spimgdb를 연결하고 무슨 일이 일어나고 있는지 확인해야합니다. 하지만, 난 이미 코드 경로 내가 [9.1.17와 함께] 당신의 문제를 재현 할 수없는거야 QtSpim

+0

좋아, 이제 나는 MARS로 이사 갈거야. 내 시험은 3 일 만에 끝날 것이며 스핌 버그 이후에 시간을 보지 않아도됩니다. 너무 나쁘다. 나는 Qtspim을 선호한다. GUI는 더 깔끔하다. – LivingSilver94