HNU 编译系统 代码生成练习题(ChatGPT出题)

题目1

考虑以下简单程序:

int x; 
int y; 
int z; 
x = 1 + 2 + 3; 
y = 4;
z = x + y;

请回答以下问题:

  1. 栈式计算机代码生成
    假设使用栈式计算机,请为上述程序生成目标代码。栈式计算机的指令包括pushloadstoreadd等。
  2. 寄存器计算机代码生成
    假设使用寄存器计算机,并且有无限多个虚拟寄存器(用r1r2等表示),请为上述程序生成目标代码。寄存器计算机的指令包括movn(移动立即数)、loadstoreadd等。
  3. 比较分析
    比较栈式计算机和寄存器计算机在代码生成上的主要区别(如指令特点、效率、资源使用等)。
  4. 寄存器分配
    在寄存器计算机中,寄存器分配是一个重要问题。请基于以上程序,画出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. 主要区别:
  • 指令特点:栈式计算机基于栈操作,将操作数都存储在栈里,只能对栈顶的元素进行操作;寄存器计算机基于寄存器操作,将操作数都存储在寄存器里(假设无限多寄存器),能对所有寄存器里的元素进行操作。
  • 效率:寄存器计算机更高效,因为寄存器访问速度快,且指令并行度更高;栈式计算机需要频繁栈操作,内存访问频繁。
  • 资源使用:栈式计算机使用栈内存,资源成本低;寄存器计算机需要大量寄存器,资源成本高。
  1. 先生成三地址码:
1: t = 1 + 2;
2: x = t + 3;
3: y = 4;
4: z = x + y;

再进行活性变量分析:
![[Pasted image 20251124193745.png|300]]

然后画出RIG图:
![[Blank diagram (6).png|300]]

然后画寄存器分配图:
![[Blank diagram (7).png|300]]

最后是寄存器分配好的寄存器计算机代码:

.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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值