在拼图解算器的mips装配中回溯

时间:2016-05-01 20:26:32

标签: assembly mips backtracking

我正在研究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

这是我到目前为止所得到的,我知道它是不完整的我最终认为整个猜测函数需要返回一些但我不知道何时返回它。任何提示都将非常感激。

0 个答案:

没有答案