0

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 関数を使用して交換することです。問題は、配列を扱うときに使用することになっている構文を本当に知らないため、これを行う方法がわからないことです。誰かが助けてくれれば幸いです。

4

2 に答える 2

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
于 2014-10-20T22:18:04.643 に答える