题目1
考虑以下简单程序:
int x;
int y;
int z;
x = 1 + 2 + 3;
y = 4;
z = x + y;
请回答以下问题:
- 栈式计算机代码生成
假设使用栈式计算机,请为上述程序生成目标代码。栈式计算机的指令包括push、load、store、add等。 - 寄存器计算机代码生成
假设使用寄存器计算机,并且有无限多个虚拟寄存器(用r1、r2等表示),请为上述程序生成目标代码。寄存器计算机的指令包括movn(移动立即数)、load、store、add等。 - 比较分析
比较栈式计算机和寄存器计算机在代码生成上的主要区别(如指令特点、效率、资源使用等)。 - 寄存器分配
在寄存器计算机中,寄存器分配是一个重要问题。请基于以上程序,画出RIG并用图着色算法进行寄存器分配,将分配后的寄存器写入寄存器计算机代码。
答
.int x
.int y
.int z
; x = 1 + 2 + 3;
push 1
push 2
add
push 3
add
store x
; y = 4;
push 4
store y
; z = x + y;
load x
load y
add
store z
.int x
.int y
.int z
; x = 1 + 2 + 3;
movn 1, r1
movn 2, r2
add r1, r2, r3
movn 3, r4
add r3, r4, r5
store r5, x
; y = 4;
movn 4, r6
store r6, y
; z = x + y;
load x, r7
load y, r8
add r7, r8, r9
store r9, z
- 主要区别:
- 指令特点:栈式计算机基于栈操作,将操作数都存储在栈里,只能对栈顶的元素进行操作;寄存器计算机基于寄存器操作,将操作数都存储在寄存器里(假设无限多寄存器),能对所有寄存器里的元素进行操作。
- 效率:寄存器计算机更高效,因为寄存器访问速度快,且指令并行度更高;栈式计算机需要频繁栈操作,内存访问频繁。
- 资源使用:栈式计算机使用栈内存,资源成本低;寄存器计算机需要大量寄存器,资源成本高。
- 先生成三地址码:
1: t = 1 + 2;
2: x = t + 3;
3: y = 4;
4: z = x + y;
再进行活性变量分析:
![![[Pasted image 20251124193745.png|300]]](https://i-blog.csdnimg.cn/direct/fda838f9646243af994f0f8a836c4e0d.png)
然后画出RIG图:
![![[Blank diagram (6).png|300]]](https://i-blog.csdnimg.cn/direct/de5da9b9c9374b9ea387bc582a33124a.png)
然后画寄存器分配图:
![![[Blank diagram (7).png|300]]](https://i-blog.csdnimg.cn/direct/b7749a3f4b05453eb498203317c24eb5.png)
最后是寄存器分配好的寄存器计算机代码:
.int x
.int y
.int z
; x = 1 + 2 + 3;
movn 1, r1
movn 2, r2
add r1, r2, r1
movn 3, r2
add r1, r2, r1
store r1, x
; y = 4;
movn 4, r2
store r2, y
; z = x + y;
load x, r1
load y, r2
add r1, r2, r1
store r1, z
2614

被折叠的 条评论
为什么被折叠?



