在 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,正确索引该行。