⚠️ 自己写:整个生成器出报告
(每道题开头都有同一段:MNEMONIC 把运算符映射到助记符(+→ADD、-→SUB、*→MUL);select(t) 把一条 IR 选成几条汇编(二元运算 4 条、const/copy 各 2 条);gen(prog) 生成全部汇编行;
真机上怎么算生成对了
在真实机上跑代码生成器,判定它「对了」看的是【0】。
从现象认生成的问题
把四种现象和原因配对,打印四个字母:
把生成器跑起来
场景:~/gen 下有一个代码生成器和一段 IR,说明写了怎么跑。 任务:把它跑起来,让它为那段 IR 生成汇编,然后运行 ~/check(它核对生成的指令数)。 范围:只在 ~/gen 下你自己的生成器与 IR 文件里操作;答案是运行后拿
生成了几条指令
场景:~/gen 的生成器会为 ir.txt 里的 IR 生成汇编。对照表列了八个数。 任务:跑生成器,数出一共生成了几条汇编指令,到对照表里查那个数对应的标记。 范围:只在 ~/gen 下你自己的生成器与 IR 文件里操作;答案是运行后拿
生成里有几条加法
场景:~/gen 生成的汇编里有若干条 ADD。对照表列了八个数。 任务:跑生成器,数出汇编里 ADD 出现几次,到对照表里查那个数对应的标记。 范围:只在 ~/gen 下你自己的生成器与 IR 文件里操作;答案是运行后拿到的一段标记。 提
这段 IR 一共几条
场景:~/gen/ir.txt 是一段三地址码。对照表列了八个数。 任务:数出这段 IR 一共几条(不是生成后的汇编),到对照表里查那个数对应的标记。 范围:只在 ~/gen 下你自己的生成器与 IR 文件里操作;答案是运行后拿到的一段标记
要溢出几个寄存器
场景:~/gen/说明.txt 写了这段 IR 用了几个临时值、机器有几个寄存器。对照表列了八个数。 任务:算出要溢出到内存几个(临时值减寄存器、最少 0),到对照表里查那个数对应的标记。 范围:只在 ~/gen 下你自己的生成器与 IR
修好漏了 STORE 的生成器
场景:~/gen 的生成器有 bug——二元运算少发了最后那条 STORE,结果没存回,生成的指令数偏少。 任务:把生成器改对(补回 STORE),让它为已知 IR 生成正确条数的指令。改好运行 ~/check。 范围:只在 ~/gen 下
修好选错助记符的生成器
场景:~/gen 的生成器把加法选成了错的助记符(比如 + 发成了 SUB),生成的汇编里该有的 ADD 一条都没有。 任务:把助记符映射改对,让加法生成 ADD。改好运行 ~/check(它核对 ADD 的条数)。 范围:只在 ~/gen