在编写基于MIPS的类C语言编译器程序的过程中遇到的一些问题
在前一阵用Java写C--(简化的C语言)编译器的时候,遇到了一个困扰我很久的问题:在将测试C—代码输入并执行完parser和typechecking之后,成功编译生成了一段完整的MIPS代码。然而将MIPS代码复制进模拟器QtSpim执行时,模拟器却报错了。
问题分析:一开始无法直接定位出现问题的位置,只能由QtSpim提供的错误信息里找到出错的代码位置,发现问题出在了在函数之间传递参数的代码上。

Error message:Instruction references undefined symbol at 0x00400014
为了定位问题的具体类型,将输入的C--代码功能简化到一个单独的main函数,然后逐步添加全局变量、添加局部变量声明、流程控制语句和函数声明及调用,最终发现问题出在了函数的参数传递上。
找到出错误的代码后,发现问题在于调用函数时会对参数的偏移量进行对齐,而进行对齐的代码出了一点错误。将错误修正后,问题得以解决。


浙公网安备 33010602011771号