



patch_instructions遍将编译器从x86 Var 语言翻译到x86 Int 语言,确保每条指令都遵守一条指令最多只能有一个参数会内存引用的限制。
我们回到下面的例子。
assign_homes编译遍产生以下转换
第二个movq指令是有问题的,因为两个参数都是栈位置。建议通过从原栈位置传送到寄存器rax,然后从rax传送到目标位置来解决此问题,如下所示。
习题2.7 在compiler.rkt中实现patch_instructions编译遍。创建三个新的示例程序,用于练习本节中所有此遍的有趣案例。在run-tests.rkt脚本中,将以下条目添加到编译遍列表中,然后运行该脚本以测试编译器: