我需要帮助将此伪代码转换为mips。我们应该递归地反转整数数组。
/* Function to reverse arr[] from start to end*/
void reverseArray(int arr[], int start, int end)
{
int temp;
if (start>= end)
return;
reverseArray(arr, start+1, end-1);
temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
/* Utility that prints out an array on a line */
void printArray(int arr[], int size)
{
int i;
for (i=0; i<size; i++)
printf(”%d ”, arr[i]);
printf(”\n”);
}
/* Driver function to test above functions */
int main()
{
int arr[] ={1, 2, 3, 4, 5, 6};
printf(”Original array is : ”);
printArray(arr, 6);
reverseArray(arr, 0, 5);
printf(”Reversed array is : ”);
printArray(arr, 6);
return 0;
}
答案 0 :(得分:0)
您可以使用堆栈推送和弹出概念反转数组: enter image description here
执行推送和弹出的 MIPS 代码:
.data
space: .asciiz " "
newline: .asciiz "\n"
array: .word 1, 3, 5, 7, 9, 12, 14, 15, 17, 19
.word 21, 22, 25, 27, 29, 33, 33, 35, 37, 39
.word 41, 44, 45, 47, 49, 52, 53, 55, 57, 59
length: .word 30
.text
.globl main
.ent main
main:
#loop to read items from array and push to stack
la $t0 array #array's starting address
li $t1 0 #loop index, i=0
lw $t2 length #length
pushLoop:
lw $t4 ($t0) #get array[i]
# printing array
addi $a0,$t4,0
li $v0,1
syscall
# printing space
li $v0, 4
la $a0, space
syscall
subu $sp $sp 4
sw $t4 ($sp)
addi $t1 $t1 1 #i = i+1
add $t0 $t0 4 #update array address
blt $t1 $t2 pushLoop
#loop to pop items from stack and write into array
la $t0 array #array's starting index
li $t1 0 #loop index i=0
lw $t2 length
popLoop:
lw $t4 ($sp)
addu $sp $sp 4
sw $t4 ($t0) #set array [i]
add $t1 $t1 1 #i=i+1
add $t0 $t0 4 #update array address
blt $t1 $t2 popLoop #if i<length continue
#giving space of a line
li $v0,4
la $a0, newline
syscall
la $t0 array #array's starting index
li $t1 0 #loop index i=0
lw $t2 length
traverseArray:
lw $t4 ($t0) #get array[i]
# printing array
addi $a0,$t4,0
li $v0,1
syscall
#
#printing space
li $v0, 4
la $a0, space
syscall
addi $t1 $t1 1 #i = i+1
add $t0 $t0 4 #update array address
blt $t1 $t2 traverseArray
li $v0 10
syscall
.end main