假设我有一个大小为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以便进入我想要的单元格。
答案 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