【发布时间】:2021-05-19 16:49:37
【问题描述】:
program main();
a,b: integer;
function p(name x: integer; var y,z: integer): integer;
a: integer;
function f(y: integer): integer;
b,c: integer;
a := a+1;
if (g(y<=0)) then return 2;
return 2*x + p(y--/2,b,c) – b*c;
end function;
function g(name i: integer): integer;
if (b < 3) then return 1;
return i;
end function;
a := b++;
y := f(x);
z := y*f(x) – a;
return a;
end function;
a := 1;
b := 6;
p(a+b--,a,b);
print(a,b);
end program
这是程序,我想在其中为 MIPS 中的代码生成器分配寄存器。我对嵌套函数有问题。 我的收银机是:2-25 美元。 寄存器 $4-$7 用于传递参数,$3 用于调用函数时的通道访问链接,$2 用于函数结果。寄存器 $16-$23 在调用函数时必须保持其值,因此如果它们被绑定,则必须通过进入函数并将它们存储在堆栈中的辅助位置并 在退出函数之前重新加载。如果字长为 4 字节,每个代码单元的激活记录大小是多少,包括参考评估子程序的参数? 还有,需要分配多少个寄存器,需要分配哪些?
【问题讨论】:
标签: function nested mips allocation subroutine