SI02汇编语言集成开发环境的设计开发
4.2 模拟执行程序(仿真程序)的实现
模拟执行程序(仿真程序)由C++语言编写的软件仿真的类来实现。该类被说明为汇编程序类的友员,以便访问汇编程序类的数据成员。
类中构造了一结构型变量来实现对硬件方面的仿真,并用一个成员函数来模拟指令执行的流程。该函数的参数是当前正运行的指令的PC值,返回将要运行的下条指令的PC值。
通过对汇编程序类中产生的每条指令所在的行号、程序计数器(PC)的地址、指令的机器码和字节数的分析,确定该指令是否改变了特殊功能寄存器、片内RAM、片外RAM以及程序计数器(PC) 的值。并根据分析的结果更新特殊功能寄存器和RAM的值。若该指令是跳转指令,需根据跳转条件判断跳转的地址,获得跳转到的行的PC值,作为函数的返回值。否则将源程序的PC值增加1。
当然,该开发环境还支持单步执行、执行到断点等程序调试方式,它们在实现方法上和连续执行基本一致,只是单步执行时每次只执行一条语句,然后等待用户输入新的命令才开始执行下条程序;执行到断点的实现,只需在连续执行流程中增加一个是否执行到断点了的判断语句:如果不是断点,则程序往下执行;如果是断点则停止执行,等待用户输入新的命令。而新命令的输入,则是通过编辑器界面上的调试菜单或键盘操作来实现。
界面设计的目的是为了提供良好的人机交互环境,集编辑、汇编、调试和通信于一体,便于使用。利用MFC的消息映像机制,通过鼠标和键盘事件来驱动相应程序的运行。面向程序设计语言的符号化调试技术的特点就是能够支持在源程序的任何程序语句上设置断点,并支持单步执行、连续执行、执行到断点等多种程序执行方式。
上述所有功能都要以交互的方式来完成,并且以调试时显示合适的源代码的行号的形式来达到这些目的。面向程序设计语言的符号调试,可以面向多种程序设计语言,我们做的这个开发环境主要面向SI02汇编语言的程序设计,因此我们所要开发的调试环境就是为这个使用汇编语言编写的程序提供调试服务。
面向程序设计语言的符号化调试技术的实现需要从编译或汇编连接系统中取得帮助,也就是说,编译或汇编连接系统在进行嵌入式软件的编译(汇编)生成时,要尽可能多的保留程序源代码的信息,即在所产生的目标代码文件中保存目标代码与源代码之间联系的信息。包括从源代码到目标代码的对应关系的信息、程序调试过程中出现的错误信息、以及源代码中所用到的符号的定义的信息。调试环境通过对目标文件结构进行分析,从已存在的信息中建立以下几种联系的运行时调试信息表,从而为实现面向程序设计语言的符号化调试提供了基础。
(1)目标地址到源代码的对应关系表;
(2)系统常量与内存地址的对应关系表;
(3)系统变量与内存地址的对应关系表;
(4)运行代码的标号与目标地址的对应关系表;
(5)汇编或运行过程中出现的错误信息表
其中,目标地址到源代码的对应关系可以由汇编以后生成的List文件和Obj文件来表示;系统常量与内存地址的对应关系表可由系统常量表中所保存的地址信息来建立;系统变量与内存地址的对应关系可由系统变量表中的信息来建立。另外汇编或运行过程中如果出现错误,调试器应能够到错误信息文件中进行查找并显示相应的错误信息。
建立这些联系表,并不是在运行时直接提供调试所需要的信息,从这一角度来看,应用程序调试环境必须对下列现象进行处理:
(1)程序运行的当前行显示;
(2)变量跟踪与变量内容显示;
(3)断点行显示;
(4)变量检查及修改;
(5)错误信息显示。
为解析上述现象,调试环境需要即时的取得模拟执行模块的执行状态,并取得各种寄存器的值、内存状态以及模拟执行的方式,再通过对各种联系表的处理来实现面向程序设计语言的调试。开发完成后的系统如图5所示。

5.结论
SI02IDE作为面向SI02语言的集成开发环境,将方便用户使用SI02语言进行各种开发工作。本文的创新点在于提高了软件开发的速度、效率和质量,使该软件成为软件开发最重要的和必不可少的开发工具。但该开发环境在功能上仍有一些缺陷和不够理想的地方。比如,对断点位置的处理不如主流IDE方便和直观,仍需进一步的改进和提高。
评论