COMP1521 2020T3 Q7 · MIPS函数/递归
COMP1521 2020T3 Q7 · 9 marks · MIPS
知识点: MIPS函数/递归(MASM-F) · 次: 二维数组/调用约定 · 难度: 进阶
Topic: MIPS functions & recursion · Source: https://cgi.cse.unsw.edu.au/~cs1521/26T1/resources/practice_exams.html
一句话 / Summary: 实现reflect()二维数组转置
You have been given 20t3final_q7.s ,
a MIPS assembler program which implements all but one function of this C program.
// COMP1521 20T3 final exam Q7 C reference
#include <stdio.h>
void read_array ( int rows , int cols , int a [ rows ][ cols ]);
void reflect ( int rows , int cols , int a [ rows ][ cols ], int b [ cols ][ rows ]);
void print_array ( int rows , int cols , int a [ rows ][ cols ]);
int main ( void ) {
int rows ;
int cols ;
scanf ( "%d" , & rows );
scanf ( "%d" , & cols );
int array1 [ rows ][ cols ];
int array2 [ cols ][ rows ];
read_array ( rows , cols , array1 );
reflect ( rows , cols , array1 , array2 );
print_array ( rows , cols , array1 );
printf ( " \n " );
print_array ( cols , rows , array2 );
}
void read_array ( int rows , int cols , int a [ rows ][ cols ]) {
for ( int r = 0 ; r < rows ; r ++ ) {
for ( int c = 0 ; c < cols ; c ++ ) {
scanf ( "%d" , & a [ r ][ c ]);
}
}
}
void reflect ( int rows , int cols , int a [ rows ][ cols ], int b [ cols ][ rows ]) {
for ( int r = 0 ; r < rows ; r ++ ) {
for ( int c = 0 ; c < cols ; c ++ ) {
b [ c ][ r ] = a [ r ][ c ];
}
}
}
void print_array ( int rows , int cols , int a [ rows ][ cols ]) {
for ( int r = 0 ; r < rows ; r ++ ) {
for ( int c = 0 ; c < cols ; c ++ ) {
printf ( "%d " , a [ r ][ c ]);
}
printf ( " \n " );
}
}
The function which has not been implemented is named reflect .
Add MIPS instructions for the function reflect to 20t3final_q7.s .
There are comments in 20t3final_q7.s which indicate where the MIPS instructions should be added.
20t3final_q7.s should then be equivalent to the above C program:
For example:
1521 mipsy 20t3final_q7.s
1
2
45
37
45 37
45
37
1521 mipsy 20t3final_q7.s
3
2
14
15
16
17
18
19
14 15
16 17
18 19
14 16 18
15 17 19
1521 mipsy 20t3final_q7.s < 20t3final_q7.input.txt
0 1
2 3
4 5
6 7
8 9
0 2 4 6 8
1 3 5 7 9
No error checking is required.
DO NOT CHANGE the supplied code for the functions: main , read_array , or print_array .
You only have to implement the function reflect .
You can assume the supplied code works.
Your solution must be in MIPS assembler only.
🤖 Write MIPS (mipsy). Readrows,cols, then rows·cols integers (row-major). Print the matrix (each row = integers separated by single spaces), then a blank line, then its transpose in the same format.
Verified on the sandbox AND cross-checked against an independent oracle.
样例
2 3 1 2 3 4 5 6
1 2 3 4 5 6 1 4 2 5 3 6
3 2 1 2 3 4 5 6
1 2 3 4 5 6 1 3 5 2 4 6