Mit Geschachtelten For-Schleifen und einem Array in MIPS

Dies ist eine Hausaufgabe, die ich geschrieben habe, das ganze Programm selbst, führen Sie es im debugger, und alles spielt so, wie ich meine, AUßER für diese Linie:

sw $t1, counter($a3)

Die Zuordnung ist das konvertieren dieser Schnipsel C-code auf MIPS

    for(i = 0; i < a; i++) {
       for(j = 0; j < b; j++) {
          C[2 * i] = i  j; } }

Alle Register Werte ändern die Weise, die Sie sollten in mein Programm außer für $a3 - Es ändert sich nie.

Änderungen: Ein array gebraucht werden, deklariert und "wies", die durch ein register und ein label kann nicht verwendet werden, die für einen Versatz in der Art und Weise begann ich mit

EDIT: Hier die fertigen, funktionierenden code

Mit Geschachtelten For-Schleifen und einem Array in MIPS

  • Warum hast du erwartet, $a3 zu ändern ? Sollte es die Adresse des array, und damit sollte es nicht ändern. Eigentlich verstehe ich nicht, was dein problem ist.
  • Ich bin versucht zu speichern, das Ergebnis von i - j in jeden index $a3, also sollte ich nicht sehen, einige Wert, oben knallend in den $a3 register mit dem Wert Raum? Ich bin mir nicht sicher, wie Sie Sie besser zu erklären, mich würde ein screenshot von meinem mars compiler helfen? Ich kann Ihnen zeigen, was ich sehe
  • Wenn Sie die Zeile sw $t1, x($a3) mit x=8, der Wert von t1 wird gespeichert in $a3[2] (3. int der Arrays, zeigte $a3). Wenn es nicht der Fall ist, dann die Zeile wird nie ausgeführt.
  • Okay, das ist gut, das ist, was ich will, es zu tun. Wie kann ich ein array deklarieren und $a3 Punkt-zu-es?
  • Ich bin mir nicht sicher über die MIPS-syntax, ist aber zu erklären, es sollte wie myarray: .space 40 für 10 Wörter. Dann müssen Sie zum laden der Adresse in $a3, mit la $a3, myarray, wenn ich mich nicht Irre.
  • Okay, Super, ich selbst überrascht, herauszufinden, dass man sich, bevor man reagiert! Aber jetzt bin ich Absturz mit dieser Fehlermeldung Zeile: Assignment2.asm Zeile 30: Runtime exception bei 0x00400064: Adresse außerhalb des Bereichs 0x20020100 siehe Auch meine Frage, verzeichnete einen screencap
  • Ihre loops sind falsch. Derzeit wird die Schleife bis i==a, statt zu stoppen, nach a-1. Auch dein Konstrukt ist ein wenig umständlich. Denken Sie daran, dass for(i=0;i<a;i++){loop;} übersetzt i=0;while(i<a){loop;i++}, und dies kann direkt übersetzt werden in die Baugruppe.
  • Die Linien 12 und 13 machen Sie a - 1. Und ich weiß nicht, wie zu tun, nie wirklich gearbeitet, mit Montage
  • Tatsächlich, Sie haben Recht in diesem Punkt, ich habe vergessen, dass Sie verwenden i-1 später. Trotzdem, deine loops sind immer noch falsch. Versuchen Sie zu übersetzen, die while, das ist wirklich einfach. Nur zu übersetzen, was die while tun, Schritt für Schritt. Nur nicht den direkten Punkt ist, dass die Bedingung ist ein "weiter" - Zustand, wenn Sie Sie brauchen, eine "exit" - Bedingung (aber das ist genau das Gegenteil). Und übersetzen eine Schleife in einer Zeit, ist es auch egal, wenn Sie doppelte Beschriftungen.
  • Nicht einmal zu argumentieren, sah unsere vorlesungsfolien und neu formatiert Schleifen und es funktioniert nun perfekt, nicht einmal erkennen, die for-Schleifen nicht funktionierenden rechten Zeitpunkt. Warum wirkt sich eine änderung der loop-Struktur beheben, die Adresse, out-of-bounds Problem? Und EINE LETZTE FRAGE: Wenn ich mir die Lage des Arrays in die register -, es beginnt mit einem offset von 8, aber ich sah in den debugger, und es ist nicht als ein offset gegeben, warum würde es dann nicht bei 0 beginnen?
  • Hast du ändern Sie den code in deiner Frage um das problem zu beheben? Bitte tun Sie das nicht. Von nicht die die problematische code in die Frage, die man machen kann, ist es nutzlos.
  • nur fügte der revision, nicht entfernen Sie alles wichtige zu das ursprüngliche problem selbst
  • Noch, wenn die "fertigen, funktionierenden code", es gehört in eine Antwort, nicht die Frage.

InformationsquelleAutor Captain Hook | 2015-02-12
Schreibe einen Kommentar