呼叫者或被叫者为此pascal程序保存?

时间:2018-06-10 07:26:29

标签: compiler-construction pascal cpu-registers register-allocation

对于我的作业,我得到了以下Pascal代码:

Program arraySum;
Procedure sum(a: Array [1..3] Of Integer);
    Function sum2(low, high: Integer): Integer;
        Var mid: Integer;
        Begin
            If low = high
            Then sum2 := a[low]
            Else Begin
                mid := (low + high)/2;
                sum2 := sum2(1, mid) {line 9}
                        + sum2(mid + 1, high)
            End
        End;
    Begin
        Out("Result: ", sum2(1,3))
    End;
    Begin
        sum([3,1,5])
    End.

提出问题:

  

在递归调用中   SUM2   在第9行,是否有一个应该保存的寄存器值?如果   那么,该寄存器应该是调用者保存还是被调用者保存?解释你的答案。

问题是关于保存单个寄存器,但在查看代码之后我认为我需要保存两个寄存器,即中间和高位,因为第二次递归调用需要这些寄存器。除此之外,我会说这些是调用者保存,因为这些只是临时值。 我在这里做错了吗?

0 个答案:

没有答案