所以我正在编写一个程序和子例程,其中基本上是伪代码。
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
答案 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。