基于VB的汇编语言集成开发工具设计
2015-07-31张景元
张景元, 任 菡
(山东理工大学 计算机科学与技术学院, 山东 淄博 255049)
基于VB的汇编语言集成开发工具设计
张景元, 任 菡
(山东理工大学 计算机科学与技术学院, 山东 淄博 255049)
针对汇编程序、连接程序和错误调试程序只能在DOS操作系统上运行的缺点,利用可视化软件开发工具研发了运行于Windows的汇编语言集成开发工具,实现了汇编语言源程序的汇编、连接和调试等功能。全部程序模块、DLL文件及帮助文档都集成打包为可安装的SETUP文件包,便于安装使用。运行结果证明,软件功能齐全,界面友好,操作方便。
汇编语言; 集成开发环境; 数据管道; 重定向; API函数
汇编语言是一种面向机器的低级语言,可深入到计算机底层对硬件进行操作。虽然C语言亦可对计算机硬件进行操作,但功能有限,无法替代汇编语言。用汇编语言编写的程序占用内存空间小、运行速度快,高级语言所能实现的功能,汇编语言皆可以实现,而汇编语言能实现的功能,高级语言则无法全部实现。因此,尽管高级语言的功能越来越强大,开发平台越来越好,但在用高级语言开发应用软件时,有时不得不借助于汇编语言编写某些模块,或直接将代码插入其中,或以动态连接库的形式供其调用。不仅如此,从教学的角度看,通过汇编语言的学习和实践,才能够充分了解CPU及其各接口芯片的工作原理、数据传送方式等。因此,汇编语言仍然是计算机专业的必修课程之一,也是某些专业微机原理课程所涉及的重要内容。
然而自Windows推出以后,关于DOS命令的教材已很少,在教学中对DOS命令的介绍也是简而又简,甚至忽略。但EDIT、MASM5.0、LINK、DEBUG等都是基于DOS平台的,对源程序的编辑、汇编,目标文件的连接、调试等皆分散进行,操作远不如高级语言集成开发环境方便。为方便教学,笔者开发了运行于Windows平台的汇编语言集成开发工具软件IDE(integrated development environment)。
1 设计方案
VB(Visual Basic)是基于Windows的通用开发工具,控件多、种类全、API库函数丰富,广泛用于开发大型应用软件或控制软件的前台程序。闫民亮基于VB设计了网络运行状态监控程序[1],刘银、桂晓兵利用VB开发了温度监控系统的前台程序[2-3],余文坤、王建军等将VB用于全球卫星导航系统数据及地形图数据的处理软件设计[4-6],文献[7-8]介绍了VB与Fortran、Matlab混合编程的接口方法,丁蓉则就“VB程序设计”课程的创新性实验进行了有益的探索[9]。本文将VB用于汇编语言集成开发环境IDE的设计,其中文本编辑器和调试平台等基于VB实现,将运行于DOS下的Masm、Link 和Debug作为IDE的模块挂接在后台运行,利用Windows管道技术和DOS命令重定向技术传送Masm、Link和Debug调用、运行结果等相关信息。IDE的组成结构如图1所示。
图1 IDE组成结构
2 实现过程
2.1 源程序编辑
首先设计实现一个文本编辑器,用来编辑汇编语言源程序文件,它也是呈现给用户的主要界面,需具备文本编辑的所有功能。在编辑过程中能显示光标所在的行列位置,能进行复制、剪切、粘贴操作,能打开已有的文件,关闭、保存正在编辑的文件,能新建文件、打印文件等。
编辑窗口利用功能较强的RichTextBo控件产生。调用API函数Process()和SendMessage()捕获当前光标所在位置的行列值,利用Clipboard.SetText和Clipboard.GetText实现复制、粘贴功能。“查找”对话框是为方便修改而设,可查找正在编辑的源程序文件中的任何字符。打印源程序文件是利用dlgCommonDialog.ShowPrinter实现的;新建文件、打开文件、保存文件的功能则通过调用公共对话框来实现,保存的文件默认后缀为“.asm”。其他编辑器的选单(菜单)以及各工具按钮的代码不一一列出。编辑器运行界面如图2所示,与Windows风格完全一致。
图2 编辑器界面
2.2 汇编模块
汇编过程是通过调用Masm5.0实现的,汇编时自动运行Masm.exe文件,将源程序文件汇编成目标代码文件,默认后缀为“.obj”,同时将汇编信息显示在信息框中。通过Shell调用系统内部命令模块command.com/c(加参数/c以结束调用返回)调用Masm,通过管道“|”对源程序文件进行汇编,汇编结果通过重定向“>>”输出。Shell函数返回一个进程ID号,再通过OpenProcess函数返回该进程的句柄,若获得该句柄,调用WaitForSingleObject函数等待结束信号,最后调用CloseHandle关闭句柄。产生输出文件需要将无用的中间信息删除,InStr函数为返回源串中指定无用字符串的位置,用Left和Mid函数截去无用的部分。为了显示美观,StrConv函数将指定字符串转换为每个词头字母大写。运行结果如图3所示。
图3 运行结果
部分代码如下:
pId = Shell( ″command.com /c type _ input.txt|masm>output.txt″) pHnd = OpenProcess(SYNCHRONIZE, 0, pId) If pHnd <> 0 Then Call WaitForSingleObject(pHnd, INFINITE) Call CloseHandle(pHnd) End If Open ″output.txt″ For Input As #1 While Not EOF(1) Line Input #1, S If S <> ″″ Then S = S & vbCrLf res = S Do While InStr(res, ″Source filename [.ASM]:″) i=InStr(res, ″Source filename [.ASM]:″) res=Left(res, i-1) & Mid(res, i + 103) Loop S=res S=StrConv(S, vbProperCase) msgwin.SelColor = &HC00000 msgwin.SelText = S End If Wend
2.3 链接过程
将汇编生成的“*.OBJ”类型的目标文件保存为lk.txt文件,lk.txt作为DOS命令下Link程序的管道输入端,再重定向,将结果输出到lko.txt文件里,最后将其输出到文本编辑器的信息窗口中。部分代码如下:
pId=Shell(″command.com/c type lk.txt|link>lko.txt″) pHnd = OpenProcess(SYNCHRONIZE, 0, pId) If pHnd <> 0 Then Call WaitForSingleObject(pHnd, INFINITE) Call CloseHandle(pHnd) End If Open ″lko.txt″ For Input As #1 While Not EOF(1) Line Input #1, S If S <> ″″ Then S=StrConv(S, vbProperCase) S=S & vbCrLf msgwin.SelColor = &HC00000 msgwin.SelText = S End If Wend
点击源程序汇编后的错误信息框,会自动高亮显示对应的错误所在行,以便于查找错误。汇编、链接过程没有错误时,可以运行程序并查看运行结果。
编辑器的选单条中设有一个运行选项,单击此项可以同时完成汇编、链接、运行的全部过程,若存在错误,在汇编时就会显示在信息框中。
2.4 单步、断点、反汇编
通过调用Microsoft公司的Debug程序实现断点设置、单步运行调试、反汇编等功能,具体做法是将一连串命令编写成类似批处理文件的S1.txt文件,然后重定向到文件S1o.txt,最后在信息窗口中显示出来。断点同样利用Debug的参数进行设置,生成单步执行输入文件,也是用一个类似批处理的文件来实现,用命令“RIP”更改确定开始运行的地址,用变量St输入开始运行地址,命令“T”单步执行,“Q”退出Debug。部分代码如下:
MST = ″单步运行″ MD = 0 BK = InputBox(MS, MST, MD, 100, 100) If Len(BK) = 0 Then Exit Sub End If St = CLng(BK) Open ″S1.txt″ For Output As #1 Print #1, ″RIP″ Print #1, St Print #1, ″T″ Print #1, ″Q″ Print #1, ″exit″ Close #1 pId = Shell(″command.com /c type _ S1.txt|debug fm.exe>S1o.txt″) pHnd = OpenProcess(SYNCHRONIZE, 0, pId) If pHnd <> 0 Then Call WaitForSingleObject(pHnd, INFINITE) Call CloseHandle(pHnd) End If Open ″S1o.txt″ For Input As #1 While Not EOF(1) Line Input #1, S
2.5 帮助文档
一个完整的应用软件必须有在线帮助功能。本开发工具的具体做法是先将本IDE的使用方法写成Word文档,再利用工具软件转换成help.chm文件,在选单的帮助按钮代码中调用即可。
3 结束语
用打包工具将全部软件和涉及的DLL文件打包制作成Setup安装文件,安装非常简单。本设计方案既发挥了Windows平台的优势,又使典型的“老软件”得到了充分利用,而管道技术和重定向技术是很好的链接桥梁。从几年的使用情况看,该软件运行可靠,界面友好,增强了学生的学习兴趣,提高了教学质量。
References)
[1] 闫民亮.VB编程在数字化网络维护中的应用[J].硅谷,2013(18):117-118.
[2] 刘银,盖书超,余楠,等.基于VB6.0的在线温度检测系统[J].仪表技术与传感器,2013(8):41-43.
[3] 桂晓兵,王燕昌,杨柳斌,等.基于VB与单片机干燥温度测控系统的实现[J].贵州农业科学,2013,41(2):170-172.
[4] 余文坤,戴吾蛟,杨哲.基于TEQC的GNSS数据质量分析及预处理软件的设计与实现[J].大地测量与地球动力学,2010,30(5):81-85.
[5] 王建军,吴北平,冯健.TEQC和QCVIEW32在GPS观测数据预处理中的应用[J].工程地球物理学报,2010(7):634-638.
[6] 孟现彪,史雅茹,冯禹,等.应用VB实现地形图数据格式转换[J].测绘与空间地理信息,2012,35(10):196-198.
[7] 李险峰.VB和Fortran混合编程在工程计算中的应用[J].锅炉技术,2011,42(2):62-66.
[8] 马培勇,罗红润,周思柱.基于COM组件的MATLAB和VB混编方法在机械可靠性工程中的应用[J].计算机应用与软件,2012,29(7):189-191.
[9] 丁蓉,朱琳.“VB程序设计”课程的创新性实验教学[J].实验技术与管理,2012,29(8):163-165.
Design of integrated development tool of assembly language based on VB
Zhang Jingyuan, Ren Han
(College of Compute Science and Technology , Shandong University of Technology, Zibo 255049, China)
Aiming at the weakness of movement of editing collected material procedures, linking procedures, and mistaking to adjust the procedures, which can only operate on the DOS operation system, the exploitation can see to turn a software development tool to develop the language integrated development tool of editing collected materials of Windows. This article describes how to realize the functions of the source procedure editing, conjunction, and adjustment. All procedure modules, DDL documents and the help text files can integrate to pack to wrap for the SETUP document which can be installed, and easy to gearing use. The operational results show that the software function is well-found, the interface is friendly, and the operation is convenient.
assembly language; integrated development environment; data piping; redirection; API function
2014- 06- 10
张景元(1955—),男,山东济南,工学硕士,教授,研究生导师,主要研究方向为人工智能、模式识别和智能控制等.
P273.4
A
1002-4956(2015)1- 0142- 03