我正在研究MIPS汇编中的回溯算法,我在处理范围和代码结构时迷失了方向。
我们在这里有一些活动部分,我只是在试图找出如何处理它们时让我更加困惑。
最终目标是使用回溯的拼图求解器。
“活动部件”。
我们有一个索引数组的地址,这些索引包含我们需要更改的拼图的所有索引。董事会的其他成员不能改变。
我们有拼图板的地址,只是一个字节数组。
我们有董事会的总规模,我们将用它来检查我们是否看过整个董事会,知道我们已经完成了。
我们有一个函数is_Legal(arg1,arg2)。 Arg1是要检查的板(阵列)的地址,arg2是板的大小。如果合法,则返回0,否则返回1.
所以我们先加载
initialize_guessing:
.. # build up stack
la $s0, $a0 # s0 = address of board
la $s1, $a1 # s1 = address of index array
la $s2, $a2 # s2 = size of index array
la $s3, $a3 # s3 = size of board
li $t0, 0 # t0 = values to test
li $t1, 0 # t1 = index counter
start_guessing:
beq $t1, $s2, done # if t1 = s2, we've used all indexes
lb $t2, 0($s1) # get first index
add $s0, $s0, $t2 # move to first index
sb $t0, 0($s0) # put t0 into board
move $a0, $s0 # a0 = board address for if_legal
move $a1, $s3 # a1 = board size for if_legal
jal if_legal # check if board is legal
beq $v0, $zero, continue_guessing # if board is legal, continue
j new_guess # try a new guess
new_guess:
addi $t0, 1 # increment t0 to try a new value
jal start_guessing
continue_guessing:
addi $s1, 1 # increment index array to next index
jal start_guessing
done:
# destroy stack
jr $ra
这是我到目前为止所得到的,我知道它是不完整的我最终认为整个猜测函数需要返回一些但我不知道何时返回它。任何提示都将非常感激。