Algorithm 函数数组

Algorithm 函数数组,algorithm,function,mips,Algorithm,Function,Mips,我正在尝试创建一个函数,该函数将数字排列在一个正方形网格中,其中每行、每列中的数字以及前后主对角线中的数字相加为同一个数字。虽然我对mips比较陌生,但以下是我的最新尝试: square: lw $t0,$zero #i = 0 lw $t2,1 # k = 1 div $t1,$a1,2 # j = n/2 mul $t3,$a1,$a1 # n*n while: ble $t2,$t3,else1 # k <= n*n bgt $t0,-1

我正在尝试创建一个函数,该函数将数字排列在一个正方形网格中,其中每行、每列中的数字以及前后主对角线中的数字相加为同一个数字。虽然我对mips比较陌生,但以下是我的最新尝试:

square:  lw $t0,$zero #i = 0
     lw $t2,1 # k = 1
     div $t1,$a1,2 # j = n/2
     mul $t3,$a1,$a1 #  n*n

while:  ble $t2,$t3,else1 # k <= n*n
    bgt $t0,-1,else2 #
    bgt $t1,-1,else2 #
    ble $t1,$a1,else3 #
    ble $t0,$a1,else4 #
    bne $,$,else5#a[i,j] == 0

else1:  #a[i,j] = k
    addi $t0,$t0,-1 #
    addi $t1,$t1,1 #
    addi $t2,$t2,1 #

else2:  lw $t0,1 #
    addi $t1,$a1,-1 #

else3:  lw $t1,$zero #


else4:  addi $t0,$a1,-1 #

else5:  addi $t0,$t0,2 #
    addi $t1,$t1,-1 #

end:    jr $ra
square:lw$t0$零#i=0
lw$t2,1#k=1
分区$t1,$a1,2#j=n/2
mul$t3、$a1、$a1#n*n
而:ble$t2,$t3,else1#k-1和j
您可以连续存储2D数组,并进行地址计算:
a[i,j]
存储在
基址+i+j*n

为了优化,行/列遍历以
+/-1
+/-n
增量进行

或者,您可以为行分配不同的区域,并提供行开始表

 i = 0, k = 1 and j = n/2
 while (k <= n*n)
   if (i > -1 and j > -1 and j < n and i < n and a[i,j] == 0)
     a[i,j] = k
     i = i - 1, j = j +1 and k = k + 1
   else if (i < 0 and j == n) move out of upper right square
     i = 1 and j = n - 1
   else if (j == n)           move out of right side of square
     j = 0
   else if (i < 0)            move above top row
     i = n - 1
   else                       move to an already filled square
     i = i + 2 and j = j - 1
   end if - else
 end while loop