计算MIPS ASM中2d阵列的偏移量

时间:2015-11-30 18:12:26

标签: assembly mips

假设我有一个大小为36的整数二维数组:

 game_board:   .space 36

游戏板是一个6 x 6的数独板,分为3x2盒子:

0 0 0 | 0 0 0
0 0 0 | 0 0 0
-------------
0 0 0 | 0 0 0 
0 0 0 | 0 0 0 
-------------
0 0 0 | 0 0 0 
0 0 0 | 0 0 0  

我正在使用蛮力方法来解决难题,并且需要能够调查每个单元格并进行一些计算。为了做到这一点,我相信我需要计算每个单元位置的偏移量。

到目前为止我所尝试的(从一个例子中看到)是做以下事情:

 move $s0, $zero    # Begin at position 0
 li   $s1, 6        # Load $s1 with board size
 div  $s0, $s1      # Cell Offset / Board Size
 mflo $s2           # $s2 = cell row index
 mfhi $s3           # $s3 = cell column index

此时,我不确定如何在game_board中使用$ s2和$ s3以便进入我想要的单元格。

1 个答案:

答案 0 :(得分:1)

您提供的代码片段无法正常工作,因为您将零除以6,这显然会导致零。

我建议你编写一个辅助例程,给定电路板的基地址,行长度和所需的行,列返回所需单元格的地址。

E.g:

.data
game_board:   .space 36
.text
    la $s0, game_board
    li $s1, 6
    li $a0, 1
    li $a1, 2
    jal cell_location
    # Upon return $a3 contains address of cell

# $s0: board game base, $s1: row length (number of columns per row), $a0: row, $a1:col
# Return $a3: cell location
cell_location:
  sll $a3, $s1, 2     # row size
  multu $a3, $a0
  mflo $a3            # row base offset
  sll $a1, $a1, 2     # column offset
  addu $a3, $a3, $a1  # cell offset
  srl $a1, $a1, 2     # restore column number
  addu $a3, $s0, $a3  # cell location
  jr $ra