汇编语言自动评分系统设计与实现
摘要:根据需求分析合理安排自动阅卷系统的整体结构和局部逻辑关系,包括通过VB6.0对汇编语言编程题自动系统的建模,并通过正则检测技术对自动阅卷系统进行设计。在实现汇编语言程序设计题自动阅卷技术方面提出了自己的解决方案。
关键词:自动阅卷;要点分析;正则表达式
0引言
汇编语言是直接控制硬件的计算机程序设计语言,在各类高等院校的计算机及相关专业中,均被列为一门必修的基础课。目前国内也有很多有关程序设计语言的上机考试系统,大多设计有选择题和填空题,可很好地实现对理论知识的考核,而且自动评分技术也较成熟。但对应用能力的考核——程序设计题,由于其程序自动评分很难实现。以NCRE三级PC技术的上机考试系统为例,该系统中设计有程序设计题,对程序设计类试题主要采用的是结果评分法,即只根据程序运行结果给出相应分数,而并不查看考生程序内容。这与传统人工阅卷中的评分原则是不相一致的,评分结果也并不能反映出考生的真实水平。
正则匹配到第一个关键字就停止
1评分算法
1.1算法一
该算法思想就是应用了人工阅卷的基本思想:即按考生程序中出现正确要点的情况按比例给分,以使考生的实际得分更加合理。
通过大量的汇编语言程序汇编实例我们发现:当考生源程序代码中的段定义出错时将在MSG.TXT文件中给出提示如下:①error A2034: must be in segment block 说明段定义伪指令出错了;②fatal error A1010: unmatched block nesting: data说明数据段段定义伪指令出错了;③fatal error A1010: unmatched block nesting: stack说明堆栈段段定义伪指令出错了;④fatal error A1010: unmatched block nesting: code说明代码段段定义伪指令出错了;⑤fatal error A1010: unmatched block nesting: datacate说明数据段、代码段、堆栈段、附加数据段4个段中一个或多个段完全没定义。
当出现提示①时说明,被汇编的当前程序代码存在段定义错误。至于具体是哪个段定义出错就要看接下来的提示了。出现了②、②、③分别说明数据段、堆栈段和代码段定义出错,错误的原因是段定义伪指令没有成对出现,也就是说段定义时要么段开始定义错要么段定义结束错。这种情况就要求算法1在匹配到②、③、④信息之后计次数,但累计出现只计一次。这种情况出现的话相应子要点分数应该只得该子要点分值的一半。如果出现⑤说明在考生源程序代码中数据段、附加数据段、堆栈段、代码段的段定义伪指令有一个或多个段没有定义到。这种情况就比上面的要复杂一些,此时我们要借助正则检测技术去搞清楚到底是哪个段没有定义到。
1.2算法二
正则表达式是一位叫Stephen Kleene 的美国数学家,在McCulloch 和Pitts 早期研究出的一种数学方式来描述神经网络的
基础上,于1956 年发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。随后发现可以将这一工作应用于使用Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson是Unix 的主要发明人。正则表达式的第一个实用应用程序就是Unix 中的qed 编辑器。现在,正则表达式引擎已经被Unix中的许多工具实现。另外,许多的编程语言也开始支持正则表达式这一强大的工具,如Java、VB、Python等,从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。它提供了功能强大、灵活而又高效的方法来处理文本,其全面模式匹配法可以快速地分析大量文本以到特定的字符模式,因此,它常常被应用于数据有效性检测、文本替换、子串提取等一些工作之中。
2系统总体设计
汇编语言程序设计是面向算法的程序设计语言,源程序书写格式严格规范,源程序两部分组成,一部分是段寄存器的定义;二是指令关键字。可执行文件是程序的汇编结果,源程序文件名*.asm,实际上也就是一个文本文件。为了回收试题及评阅方便,将限定考生源程序文件一律保存在指定路径,并且以自己的学号作为文件名:number.asm
在此基础上,通过VB利用Windows自带的丰富的接口函数,对于有输入的题目提供测试数据。根据运行是否通过,分别读取结果文本文件和考生源程序文件或只读考生源程序文件及相关错误信息,对能够正确运行的程序的运行结果进行判断,在正确运行的基础上检
测部分要点。或对于未能通过运行的题目利用正则检测技术要点进行分析。通过这种方法达到以往人工阅卷所采用的按
要点给分这一较合理的评卷方法,以得到一个比较准确的评分结果。
3系统功能模块设计
笔者研究汇编语言编程题的目的是能使汇编语言考试中编程题进行计算机自动阅卷,并且该系统尽可能像人工阅卷一样能给考生一个合理的分数。现在对系统各功能进行设计。
虽然研究的重点是汇编语言编程题的自动评阅,但就整个系统来说,各个模块是相互联系有机整体。以下给出系统功能模块图如图1所示。
系统运行主界面如图2所示。
图1系统功能模块图图2系统主界面
4题库设计
系统的试题数据库采用Visual FoxPro。
在设计实现自动评阅系统题库时,为了提高系统评阅结果的可靠性和准确性,我们必须像前文所述的模仿人工阅卷的要点给分法。也就是正则匹配算法中的要点,此要点必须在构造题库的同时给出明细结构,这也是系统能正常运行的必要
条件之一。考生提交答案之后,运用正则检测技术来评判答案中是否包含考试所要求的要点并据此给出相应分数。例如有一试题满分为15分,按照本限定条件,在该题作为考试题的同时就已根据该题特点将其总分分解为了3部分:要
点一2分、要点二12分、结果分1分,在使用本系统进行评阅时,根据阅卷结果得到各部分的得分并在代码中相加并生成相应表格,最后求和得出对考生答案程序评阅的实际得分。
在做到上述要求之后,还有一点值得注意。因为自动评阅系统是对程序设计题进行自动评阅,大家都知道语言的具体含义在不同语境含义不尽相同。同时自动评阅系统又是用语言去识别语言,如此一来评判结果的正确性和可靠性就很难保证。因此在研究过程中我们为了提高系统的稳定性和合理性,我们要求在题库建设时的题干中一定要有附加条件,用此法来降低系统实现的难度。比方说在题干中限定考生在编程过程中关键算法必须使用指定指令或指定寄存器。这样就可以尽可能的保证系统运行的稳定性和合理性。当然对于不同的题目就应该随机应变有不同的限定条件,这在题库中建设也要注意。
5结束语
本系统的研究是以笔者所在学校教学的实际需求为背景的,故而有一定的局限性。加上程序设计类题型自动阅卷技术目前还不成熟,系统执行的条件还受诸多因素的影响,如教育理论、测试方法、题库建设等多方面因素。所以在现阶段此类问题涉及许多领域及该领域发展现状的复杂环境下,系统的通用性还有待进一步研究。参考文献:
[1]官士鸿,周霭如,黎耀航,等.“程序设计”联机测评系统的研究[J].华南理工大学学报(自然科学版),1998(5).
[2]孟爱国,卜胜贤.一种网络考试系统中主观题自动评分的算法设计与实现[J].计算机与数字工程.2005(7).

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。