2016-06-10 3 views
3

J'ai essayé avec QtSpim 9.1.16 et 9.1.17, tous "coupez" les 2 premiers caractères d'une chaîne d'entrée, en les réglant sur 0x0, d'autres caractères ASCII sont correctement enregistrés dans le tampon. C'est mon extrait, même si un autre code que je l'ai trouvé sur Internet apporte au même résultat:QtSpim coupe les 2 caractères initiaux après la lecture de chaîne

.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 

Par exemple, si je tape « 12345 », qui est le vidage de la mémoire:

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 

Ai-je oublié quelque chose à propos de QtSpim?

+0

Je suis incapable de reproduire votre problème [avec 9.1.17]. J'ai fait une revue de code. J'ai ajouté un syscall 4 pour renvoyer le tampon, puis un syscall 10 pour quitter le programme. À moins que vous ne soyez seul, après votre appel système 11, vous «tombez du bord du monde» (c'est-à-dire quel code est exécuté?). Mais, ici, l'écho des données et le vidage hexadécimal correspondent aux résultats attendus. –

+0

J'ai été célibataire en fait, c'est ce que notre professeur nous a conseillé de faire. Si je laisse le programme fonctionner normalement, il n'y a rien de mal ... oh et que pour l'indice syscall 10, je n'étais pas au courant. Mais pourriez-vous expliquer pourquoi le pas unique provoque un tel comportement étrange? Par exemple, MARS est un bon gars et ne se comporte pas mal. – LivingSilver94

Répondre

1

Par mes commentaires les plus hauts, j'avais ajouté un syscall 4 pour faire écho le contenu du tampon et un syscall 10 pour quitter le programme.

spim peut être bizarre (par exemple "tomber du bord du monde"). Autrement dit, si le programme n'est pas terminé correctement. Quand j'ai ajouté les deux appels système, j'ai donné au programme une «zone d'atterrissage en douceur» pour une seule étape, ce qui n'était pas nécessaire pour le mode «exécution complète». Ainsi, j'ai par inadvertance falsifié le programme d'une manière qui masquait le bug du simulateur de spim.

Lorsque je suis revenu à votre exact programme, j'étais capable de reproduire votre problème. Il semble que spim fait des choses étranges si la dernière instruction dans le segment de texte est un syscall de non-sortie au cours d'une seule étape. Ajout de [pair] un nop après que votre syscall 11 a résolu le problème.


Je l'ai utilisé à la fois, mais je préfère mars: http://courses.missouristate.edu/KenVollmar/MARS/ Il est beaucoup mieux organisé pour l'étape de débogage/unique, les messages de diagnostic, la mise en bkpts, des vues de données - YMMV.

J'avais préalablement téléchargé et piraté la source des deux simulateurs. J'ai fait du nettoyage et ajouté quelques fonctionnalités. Je ne suis pas l'auteur original, mais je connais un peu le code. Je vais devoir brancher gdb à spim et voir ce qui se passe. Mais, je peux déjà dire que le chemin de code est quelque peu différent pour l'étape contre l'exécution dans QtSpim

+0

Ok, je passe à MARS alors. Mon examen est attendu dans trois jours et je n'ai pas le temps de chercher des bugs spim. Dommage, je préfère Qtspim, son interface graphique est plus soignée. – LivingSilver94