надеюсь, у тебя все хорошо в эти дни. Я пытаюсь преобразовать мой код 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 вам здоровых дней:)