计算机组成原理实验课程辅助软件的研究与设计

  • 投稿老猪
  • 更新时间2015-08-31
  • 阅读量789次
  • 评分4
  • 64
  • 0

惠 丽,张浩宇

(黑龙江大学,黑龙江 哈尔滨150080)

摘 要:“计算机组成原理实验”是《计算机组成原理》理论课程的一个重要辅助和补充,在开设实验课程过程中,我们发现实验系统自带的汇编语言指令系统与学生所学的8086汇编语言指令系统不兼容,影响了实验效果,因此课程组教师开发了一款辅助软件,通过该软件对两种汇编语言进行转换,提高了学生的学习效率,取得了较好的效果。

关键词:计算机组成原理实验;TH-union+教学实验系统;汇编语言转换器

中图分类号:G642.3 文献标识码:A 文章编号:1002-4107(2015)08-0023-02

收稿日期:2015-01-13

作者简介:惠丽(1963—),女,河北抚宁人,黑龙江大学计算机科学技术学院院党委书记,副教授,主要从事嵌入式并行计算及计算机系统结构研究。

基金项目:2014年黑龙江大学教育教学改革重点项目“计算机硬件系列课程实验教学改革的研究与实践”;2014年黑龙江省新世纪高等教育改革工程项目“计算机硬件系列课程实验教学改革的研究与实践”

一、引言

《计算机组成原理》是计算机科学与技术专业、软件工程专业的专业骨干课程,该课程围绕着构成计算机的五大部件全面详细的阐述了计算机的组成和各部件的工作原理,并引申出各部件的设计实现方法。

为了能够让学生对《计算机组成原理》这门课程有一个感性的理解,我院于2009年购置了由清华大学计算机学院研制开发的TH-union+教学实验系统,将其应用于《计算机组成原理》实验课程。TH-union+教学实验系统本身就是一台简单的计算机,该实验系统不仅能够支持传统的硬件实验,而且创造性的在实验系统中增加了汇编语言指令系统,使得很多传统硬件实验在连接了硬件电路之后,不再使用手动开关向存储器输入指令和数据的方式验证电路的正确性,而是改用通过输入汇编语言程序对电路的正确性进行验证,大大提高了工作效率,也能够更好的促进学生对理论知识的消化和理解。因此在实验课程的设置中,全体实验大致可以分成两个部分,第一部分是结合TH-union+教学实验系统现有的汇编语言编写简单的应用程序,以达到熟悉掌握实验系统各部分硬件的目的。第二部分是在第一部分的基础上由学生利用VHDL语言设计一个8位的CPU,并利用实验系统的汇编语言进行编程,以验证CPU设计的正确性。在整个实验教学过程中,利用实验系统的汇编语言编程是实验的一个重要环节,但在教学过程中,我们发现,由于学生初次接触该实验系统,对它的汇编语言指令不熟悉,常常和已经学过的8086汇编语言指令混淆,导致利用实验系统的汇编语言编程的能力不足,对后续实验有一定的影响,因此我们课程组全体教师就有了设计一个汇编语言转换器的想法。

二、对TH-union+教学实验系统的改进

TH-union+教学实验系统是一个优秀的《计算机组成原理》课程实验教学平台,它最初的受益者是清华大学计算机学院的学生,而我们黑龙江大学计算机学院软件学院的学生与清华大学计算机学院的学生相比,动手能力、综合技能还存在一定的差距,正是由于我院学生的这些差距,使我们必须对TH-union+教学实验系统进行改进。

TH-union+教学实验系统上有一个汇编语言,它和我们学过的8086汇编语言没有任何关系。也就是说同学们要做计算机组成原理实验就要再学一次汇编语言。这个汇编语言一共有48条指令,只有4种寻址方式,有16个寄存器,……,一切都变了。因此我们必须用一个方法使学生快速学会新的汇编语言,并利用它进行程序设计。

TH-union+教学实验系统的设计者为了使实验系统更接近真实的计算机在指令系统中设计了与输入输出操作有关的指令,使得程序在设计过程中可以进行输入输出操作。但是遗憾的是,学生在学习8086汇编语言时,所有的输入输出操作都是由DOS系统功能调用函数实现,没有涉及到真正的底层硬件输入输出操作,现在在实验系统上首次自己编写输入输出函数,对学生具有一定的挑战性,这是实验系统的第二点需要改进的地方。

三、解决方法

基于以上两点,课程组全体教师决定自行开发一款辅助软件,用来实现实验系统的汇编语言程序与8086汇编语言程序相互转换,进而指导辅助学生快速掌握TH-union+教学实验系统的汇编语言和相关知识。

本辅助软件是利用windows下linux模拟环境的flex工具和gcc编写完成的。flex是linux下的一个用来开发编译器的工具,主要用于词法分析器的设计开发。由于本辅助软件需要对两种汇编语言的语句进行转换,其过程包括大量的词法分析工作,因此我们选用flex工具,以缩短开发周期。

本辅助软件由两个可执行文件、两个示例程序和一个说明文件构成,两个可执行文件暂时定名为my和your。my的功能是把TH-union+教学实验系统的汇编语言程序转换成8086汇编语言程序。your的功能是把8086汇编语言程序转换成TH-union+教学实验系统的汇编语言程序。

由于指令格式的原因,实验系统的汇编语言指令操作数的寻址方式全部隐藏在操作码中,也就是说在指令译码的时候,当指令译码器分析出指令功能的同时,也知道了指令中各操作数的寻址方式。这就使得实验系统无论在指令数量还是在寻址方式方面都比8086汇编语言指令系统简单,我们把实验系统的汇编语言看成是8086汇编指令系统的子集。当my程序扫描到实验系统汇编语言指令时,根据操作码就可以判断出它对应的8086汇编指令是什么,寻址方式是什么,然后转换成8086汇编语言指令即可。通过my对两种汇编语言相互转换,提示学生注意两种汇编语言的相同点,以便学生在阅读实验系统汇编程序时快速理解它的编程目的。

your的功能是把8086汇编语言程序转换成实验系统的汇编语言程序。在具体操作中,由于8086汇编语言比实验系统的汇编语言复杂,所以需要做一些简单的限制,以便程序转换。

第一,我们约定your只能转换正确的8086汇编语言程序。辅助软件的设计目的之一是要学生在已经掌握8086汇编语言的基础上,不需要再额外学习其他汇编语言就可以在实验系统上编写程序,因此我们假设学生能够利用8086汇编语言在通用计算机上实现实验程序的设计。为了便于学生利用8086汇编语言设计程序,我们在软件包中增加了一个示例程序2.asm,它本身也是一个8086汇编语言程序框架,学生利用这个框架编程效率会更高。为了保证程序的正确性,在软件中附带了Boland公司的Turbo Assembler汇编语言编译器(简称tasm),学生编写的汇编语言可以用tasm编译成可执行文件,以保证程序的正确性。

第二,我们要对8086汇编语言程序做简单的语法分析。由于实验系统汇编指令的操作数寻址方式都是固定的,而8086汇编语言的指令系统操作数寻址方式是不固定的,这就使我们不得不对8086汇编语言程序进行简单的语法分析。

具体操作如下:转换程序your扫描到一条指令首先对指令的操作码部分进行分析,判断该指令是否可以转换成TH-union+教学实验系统的汇编语言指令,如果可以就在指定变量中设置一个指令对应的数值,如果不能转换就输出一行字符串,提示用户你的程序中使用了不可转换的8086汇编语言指令,在转换过程中把这条指令忽略。8086汇编语言指令系统是一个复杂指令系统,指令存在大量的功能冗余,因此辅助软件采用忽略指令的方式,在这里也可以采用发现不可转换的指令就发出错误提示,然后强行结束转换的方式,但课程组老师考虑到每个人的编程习惯不同,所以采用前者比较温和的提示方式。

然后是对操作数寻址方式的判断,同样根据不同的寻址方式在指定变量中设置对应的数值,如果是实验平台支持的寻址方式,就直接转换成相应的实验系统汇编语言指令,如果不是实验平台支持的寻址方式,系统将提示出现错误,并强行结束转换。在这一过程中最麻烦的是一些寻址方式的转换。例如在8086汇编语言指令系统中,双操作数指令允许目的操作数采用寄存器寻址方式,源操作数采用立即寻址方式。例如:add ax,10,但是实验系统的汇编语言规定双操作数指令的两个操作数都采用寄存器寻址方式,只有MVRD指令支持立即寻址,因此一旦发现上述指令,转换程序将产生下面四条指令,以保证程序的正确性。

PUSHR15

MVRD R15,10

ADDR0,R15

POPR15

第三,我们要对输入输出指令单独处理。由于TH-union+教学实验系统有自己的输入输出指令,这些指令与8086汇编语言的输入输出指令完全不同,为了简化问题,便于学生们迅速掌握串口操作,我们约定在编写与输入输出操作有关的程序时,必须采用事先设计的宏。首先我们在示例程序2.asm中利用DOS系统功能的7号子功能和2号子功能实现基本的输入输出宏。在编程过程中凡是遇到输入输出操作都调用这两个宏。然后我们把这两个宏名加入到转换程序中,当转换程序扫描到这两个宏名将自动生成对应的实验系统汇编指令。在程序设计过程中,实验系统的输入输出操作采用查询方式,因此每次生成的实验系统汇编程序里面一定要带一个有条件跳转指令和标号,在具体操作时,很可能出现多次使用输入输出操作,每次产生的标号都要不同,所以程序中必须对生成标号进行处理,这是此部分的设计重点。

本辅助软件首次应用于2012级软件学院的实验教学中,提高了教学效率,取得较好的教学效果,同时也有许多热心的同学对辅助软件提出了宝贵的意见,课程组全体教师将根据师生的反馈意见进一步完善辅助软件,为以后的实验教学提供更多更好的支持。

参考文献:

[1]王诚,刘卫东,宋佳兴.计算机组成与设计:第三版[M].北京:清华大学出版社,2008:7.

[2]王诚,刘卫东,宋佳兴.计算机组成与设计实验指导:第三版[M].北京:清华大学出版社,2008:8.

[3]John R.Levine.lex与yacc:第二版[M].北京:机械工业出版社,2003:1.