一旦谈到MIPS编程,我仍然是一个新手,所以请耐心等待。我正在尝试编写一个通过10个元素数组的函数,并返回数组的最大值和最小值。到目前为止,我有:
.data
X .word 31, 17, 92, 46, 172, 208, 13, 93, 65, 112
N .word 10
minValue .asciiz "Minimum Value: "
maxValue .asciiz "\nMaximum Value: "
values .asciiz "\nValues divisible by 4: "
.text
main:
la $a0, X
la $a1, N
jal MaxMin
MaxMin:
lw $t0, 0($a0)
swap:
move $t0, $s0
move $s0, $s1
move $s0, $t0
MaxMin函数应该返回X数组的最大值和最小值,供我打印输出。我的计划是遍历数组,如果元素大于或小于另一个元素,则使用swap函数交换它们。问题是我不知道如何去做这个,因为我真的不知道你在处理数组时应该使用的语法。如果有人可以提供帮助,我会很感激。
答案 0 :(得分:3)
如何首先在C中编写算法?
#include <stddef.h>
struct minmax
{
int max;
int min;
};
struct minmax maxmin(int const *in, size_t n)
{
struct minmax ret = {*in,*in};
for (size_t i = 1; i<n; i++)
{
in++;
if (*in > ret.max)
{
ret.max = *in;
}
if (*in < ret.min)
{
ret.min = *in;
}
}
return ret;
}
要迭代等效MIPS程序集中的数组,可以将指针in
加载到临时寄存器中:
la $t0, in
然后通过从内存中加载值取消引用指针:
lw $t1, ($t0)
最后在循环中递增指针:
addiu $t0, $t0, 4
答案 1 :(得分:1)
这里有一个关于如何通过函数读取和打印数组元素的想法。将进行比较并进行交换。
.data
space: .asciiz " "
X: .word 31, 17, 92, 46, 172, 208, 13, 93, 65, 112
N: .word 10
.text
main: la $a0, X #$a0=load address of array X
lw $a1, N #$a1=10 --number elements
jal readArray #call readArray
li $v0, 10 #exit program
syscall
readArray:
li $t0, 0 #$t0=0
li $t1, 0 #$t1=0
buc: bge $t0, $a1, final #if $t0 >= $a1 then goto final
lw $a0, X($t1) #$a0 = X(i)
li $v0, 1 #Print integer
syscall
la $a0, space #load a space: " "
li $v0, 4 #print string
syscall
addi $t1, $t1, 4 #Every 4 bytes there is an integer in the array
addi $t0, $t0, 1 #$t0=$t0+1
b buc #goto buc
final:
jr $ra #return