Integer-Arrays in MIPS : Einstellung array[index], um die iteration mit dem Wert habe ich?

Arbeite ich an der übersetzung des unter C++ - code auf MIPS (dies ist nur ein kleiner Teil des Programms, dass ich stecken geblieben bin), und ich verstehe, wie $t Register nehmen Sie die array-Werte gegeben, aber ich bin völlig stecken,

pos[count] = i;

Ich habe versucht sw, lw, aber jedes mal wenn ich versuche diese, bekomme ich die Adresse außerhalb des Bereichs Ausnahmen/etc.

Kann mir jemand erklären, was läuft hier falsch? Wenn die Schleife bekommt pos[count] = i muss ich ändern pos[count] aus 0xffffffff zu (i) for-each-Schleife iteration. Der Fehler kommt, weil ich einstellen muss für die -1 in pos[] ?

Ich bin völlig verloren und waren nicht in der Lage zu finden, alle Erklärungen, die sind ähnlich genug, um dieses problem.

(Entschuldigung für die Formatierung, da MIPS hat so viele Registerkarten Linien, die Formatierung für die Veröffentlichung hier ist besonders verrückte)

    .data
x:  .word   0
    .word   0
    .word   0
    .word   0
    .word   0
    .word   0
    .word   0
    .word   0
    .word   0
    .word   0
pos:    .word   -1
        .word   -1
        .word   -1
        .word   -1
        .word   -1
        .word   -1
        .word   -1
        .word   -1
        .word   -1
        .word   -1
d:      .word   73
        .word   47
        .word   23
        .word   26
        .word   67
        .word   99
        .word   13
        .word   53
        .word   1
        .word   97

sp: .asciiz " "
endl:   .asciiz "\n"

# $s0   count
# $s1   key
# $s2   i

        .text

main:   addi    $s0, $0, 0  #  int count = 0;
        addi    $s1, $0, 24         #  int key = 24;
        addi    $s2, $0, 0
        la  $s3, d
        la  $s4, pos
        la  $s5, x
                       #  for (int i=0; i<10; i++) {
loop:   mul     $t0, $s2, 4 #    if (d[i] >= key) {
        add     $t0, $t0, $s3
        lw  $t0, ($t0)

            blt     $t0, $s1, loop1

            sll     $t1, $s0, 2     # $t1 = count * sizeof(int)
            addu    $t2, $s4, $t1   # $t2 = &pos[count];
            lw      $t2, ($t2)  # $t2 = pos[count];

            add     $t3, $s5, $t1   # $t3 = &x[count];
            lw      $t3, ($t3)  # $t3 = x[count];


            sw    $s2, ($t2)            #      pos[count] = i;
                    #      x[count] = d[i];

loop1:     addi    $s2, $s2, 1     # i++;
           addi    $s0, $s0, 1     # count++;
                    #    }
                    #  }

Hier ist der C++ - code-Entsprechung:

#include <iostream>
using namespace std;

int x[10] = {0};
int pos[10] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
int d[10] = {73, 47, 23, 26, 67, 99, 13, 53, 1, 97};
int main() {

int count = 0;
int key = 24;
for (int i=0; i<10; i++) {
   if (d[i] >= key) {
     pos[count] = i;
     x[count] = d[i];
      count++;
  }
 }

for (int i=0; i<10; i++) {
    if (pos[i] < 0)
      break;
     cout << pos[i] << " " << x[i] << endl;
    }

 }
  • Ich kann nicht Köpfe oder Schwänze diese. Es wäre hilfreich, wenn Sie zeigte, was C++ - code, die Sie versuchen zu duplizieren, und dann würden wir wissen, was diese tun soll.
  • Gotcha. Ich habe gerade das C++ - äquivalent deutlich mehr an der Unterseite der post. Mein Hauptproblem ist die übersetzung pos[count] = i; und x[count] = d[i]; zu MIPS
InformationsquelleAutor blunatic | 2013-09-30
Schreibe einen Kommentar