在 MIPS asm 中的这个数独求解器实现中,这个值从哪里来
Where does this value come from in this Sudoku solver implementation in MIPS asm
我对这段代码感兴趣,来自 https://github.com/delucas/sudoku-project/blob/master/sudoku-assembler-mips/sudokiller.s#L158
# 3x3-Box check
div $t0, $a1, 3 # $t0 = row / 3
mul $t0, $t0, 27 # Offset of the row ->>> Where does the 27 come from?
div $t1, $a2, 3 # $t1 = col / 3
mul $t1, $t1, 3 # Offset of the column
add $t1, $t0, $t1 # Offset of the first cell in the box
我想了解我们在这里做什么,但我对数字 27 的意义感到困惑。
棋盘是一个二维数组,因此例如 board[2][2]
会转换为 board[2*9+2]
。 row 的代码等效于 (t0/3)*27
,它将行号与其框(的第一个数字)对齐,然后有效地乘以 9,正确索引该行。
我对这段代码感兴趣,来自 https://github.com/delucas/sudoku-project/blob/master/sudoku-assembler-mips/sudokiller.s#L158
# 3x3-Box check
div $t0, $a1, 3 # $t0 = row / 3
mul $t0, $t0, 27 # Offset of the row ->>> Where does the 27 come from?
div $t1, $a2, 3 # $t1 = col / 3
mul $t1, $t1, 3 # Offset of the column
add $t1, $t0, $t1 # Offset of the first cell in the box
我想了解我们在这里做什么,但我对数字 27 的意义感到困惑。
棋盘是一个二维数组,因此例如 board[2][2]
会转换为 board[2*9+2]
。 row 的代码等效于 (t0/3)*27
,它将行号与其框(的第一个数字)对齐,然后有效地乘以 9,正确索引该行。