Программа MIPS для доступа к элементу массива - PullRequest
0 голосов
/ 31 марта 2020

надеюсь, у тебя все хорошо в эти дни. Я пытаюсь преобразовать мой код C ++ в mips, но я борюсь за некоторые моменты. Прежде всего, это мой код C ++:

#include "pch.h"
#include <iostream>

using namespace std;

int matrix[2][5] = { {1,2,3,4,5}, {6,7,8,9,10} };

int rowSize = 2;
int colSize = 5;
int i = 0;
int j = 0;

int main()
{
    while (i < rowSize) {

        if (j < colSize) {

            cout << matrix[i][j] << " ";
            j++;

        }
        else {
            j = 0;
            i++;
            cout << endl;
        }
    }
}

И это мой код MIPS:

.data
    matrix: .word 1, 2, 3, 4, 5
        .word 6, 7, 8, 9, 10

    rowSize: .word 2
    colSize: .word 5
    .eqv dataSize 4

    newLine: .asciiz "\n"
    space:   .asciiz " "
.text

    main:
        la $a0, matrix   #Loading from Random access to registers.
        lw $s0, rowSize
        lw $s1, colSize

        li $t0,0     # i= row index
        li $t1,0     # j= col index

        jal printMatrix



        li $v0,10
        syscall 


    printMatrix:

        bge $t0, $s0, exitLoop                          # If  i < rowSize is false, exit the loop
        bge $t1, $s1, else              # If i<rowSize is true and j < colSize is false, jump to else 

        mul $t2, $t0, $s0                #Following the function address = baseAddr + ( rowIndex * colSize + colIndex) * byteSize
        add $t2, $t2, $t1
        mul $t2, $t2, dataSize
        add $t2, $t2, $a0

        lw $t3, 0($t2)

        li $v0,1            # printing element inf Array[i][j] each loop
        move $a1,$t3
        syscall

        li $v0,4            # printing space after each element
        la $a2, space
        syscall

        addi $t1, $t1, 1

        j printMatrix

    else:
        li $t1,0              # j = 0
        addi $t0, $t0, 1              # i++;

        li $v0,4
        la $a2, newLine          #Printing new line after printing one row
        syscall
        j printMatrix

    exitLoop:
        li $v0,10
        syscall             #terminate the program

Итак, следуя инструкциям и сообщениям stackoverflow, я вижу, что люди могли видеть результаты правильно, используя тот же метод, что и я (в моем случае правильный ввод:

1 2 3 4 5 6 7 8 9 10

Но это ввод, который я получаю:

268500992xxx268500992xxx268500992xxx268500992xxx268500992xxx268500992xxx268500992xxx268500992xxx268500992xxx268500992xxx268500992xxx

xxx - это изначально квадраты в выводе, не являются квадратными * * *, 1015 * xxx - * * * * *1013* 1014 * xxx - это не квадратные числа, обозначенные как квадратные числа (не являются символами) это показывает, как это), но я понятия не имею, почему он печатает 268500992 снова и снова. Любые подсказки?

Спасибо и я sh вам здоровых дней:)

...