(M68k)为什么我的价值没有传递到D0中?

时间:2018-12-12 06:02:28

标签: recursion assembly subroutine motorola 68000

所以我正在编写一个程序和子例程,其中基本上是伪代码。

int findmin(int* vals, int count){
    if(count == 1){
         return vals[0];
          }else{
          int minrest = findmin(vals+1,count-1);
              if (minrest < vals[0]){
              return minrest
              }else{
               return vals[0]
                   }
             }
        }

我基本上必须将其放入m68k汇编代码中。图片中到目前为止我所拥有的。我认为我的逻辑是正确的,但是由于某种原因,所有这一切都是打印出我的头文件,而没有其他任何事情,我觉得由于某种原因,我没有将我的结果严格存储在应有的D0中。是否有我所缺少的步骤,或者我已经完全放弃了?我的prog4.s是我的主程序,它调用子程序

My prog4.s is my main that calls the subroutine subroutine recursive function

1 个答案:

答案 0 :(得分:0)

main 代码如下调用子例程:

    pea     vals
    move.w  D1, -(SP)
    jsr     findmin
    adda.l  #6, SP

findmin 子例程进行下一个递归调用:

    move.l  A0, -(SP)
    move.w  D1, -(SP)
    jsr     findmin
    adda.l  #6, SP

findmin 子例程检索其参数,例如:

findmin:
    link    A6, #0
    ...
    move.w  8(A6), D1
    move.l  12(A6), A0      <<< Here is the error!

但是请等,由于您将事物放置在堆栈上的方式,这就是堆栈的布置方式:

          A6  RTS  D1  A0
lower    ==== ==== == ====    higher
         ^
         SP == A6

以上显示单词 D1在8(A6),而 longword A0在10(A6)。 那是10而不是12。