论文部分内容阅读
摘要:为了方便教学,让学生尽快掌握汇编语言程序设计的方法,开发了基于VC++的Windows下MASM集成汇编系统,该系统集成了微机汇编语言主要调试工具,实现了编程、编译、联接和动态调试等功能的一体化。实践证明:MASM集成汇编系统界面友好、操作方便,有较好的应用价值。
关键词:汇编语言;微机;教学;Visual C++;Windows
中图分类号:G640文献标识码:A文章编号:1009-3044(2008)23-966-03
The Research and Development of MASM Integrated Assemble System in Windows
SU Jian-yuan, FANG Jian, WANG Ling-ling, LIANG Hong-yan, ZHAO Xin
(College of Electrical Engineering,Hehai University, Nanjing 210024, China)
Abstract: In order to satisfy the need of teaching and let students study the programs design method of assembly language, developed MASM integrated assemble system in windows based on VC++. This system included main debugging tools of microcomputer assembly language and its interface is friendly, its operation is simple. It has better application values.
Key words: Assembly language; microcomputer; teaching; visual C++; Windows
1 引言
汇编语言的优点是速度快,可以直接对硬件进行操作,这对诸如图形处理等关键应用是非常重要的。作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。但是,现有的宏汇编编译工具主要还是工作在DOS环境中,虽然DVCC-8086H开发环境是Windows,但软件不能独立运行,必须连接仿真设备才行。该文运用Visual C++开发了一种Windows下MASM集成汇编系统。
2 系统主要功能及其实现
Windows下MASM集成汇编系统主要实现以下功能:
1)能在该系统中编写程序并可以对程序进行编辑、保存、打印,自动提供微机汇编语言程序的分段框架结构;
2)对ASM文件进行编译,可运用指令ShellExecute(NULL,"open"," masm.exe的全路径名",m_strCmd,NULL,SW_HIDE)调用masm.exe应用程序完成编译功能。为了方便用户,编译之后自动跳出编译结果,还可以通过查询List文件和Cross文件修改程序中的错误,为了边看文件边修改错误,将List文件和Cross文件的对话框设置成非模态对话框;
3)对OBJ文件进行联接,调用link.exe文件,联接后显示提示信息;
4)对EXE文件或COM文件进行动态调试;
5)启动画面中显示软件名称和版权等提示信息,使用动画可以减少等待程序加载过程中的枯燥感;
6)其它设置。如字体设置,新建窗口、层叠、平铺和排列图标等窗口的设置,左缩进设置等。
下面重点讨论启动界面和编译功能的实现方法。
2.1 启动界面的实现
启动界面如图1所示。应用VC++制作系统启动画面基本步骤如下:
1)用Photoshop等工具制作启动画面图象,保存为bmp格式。
2)用Appwizard建一个基于单文档的Splash。
3)在资源中插入点阵图资源。打开VC++的资源编辑器,用鼠标右键按一下Resources文件夹,选择Import命令,插入所制作的点阵图。如果点阵图超过256色,VC++会弹出对话框,提示点阵图已经插入但不能在点阵图编辑器中显示,将点阵图ID改为IDB_SPLASH。
4)添加Splash Screen控件。选择菜单“project”/“Add To Project”/“Conponents and Controls”打开对话框,在对话框中连续按两下"Visual C++ Conponents"选项,选择“Splash Screen”控件,然后按一下“Insert”。 确认或修改类名和点阵图资源ID,按OK确认。 选择、连接后,启动画面就显示出来了。
5)如果需要改变启动画面的停留时间,就修改SetTimer()函数的第二个参数,默认是750毫秒。
int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{ SetTimer(1, 750, NULL); //修改第二个参数以调整画面停留时间
return 0;}
2.2 编译功能的实现
实现编译功能的部分程序如下:
//编译子函数,调用masm.exe
void CChildView::masm(CString lpfilename)
{
//构造全路径命令行参数
……
//调用masm.exe进行编译
ShellExecute(NULL,"open",strCmdLine,m_strCmd,NULL,SW_HIDE);
m_strRunFileName = filename;
//将文件名保存以便连接和运行使用
//等待0.1秒,等待汇编完成,产生*.CRF、 *.OBJ、 *.LST文件
Sleep(200);
BuildDlg();//弹出编译结果汇报对话框
m_ListMenu = TRUE; //使能“查看LIST文件”菜单
m_CrossMenu = TRUE;//使能“查看CROSS文件”菜单
m_LinkMenu = TRUE; //使能“连接”菜单
//这时的菜单查看LIST文件、查看CROSS文件和连接都变黑。如图2所示。
}
编译完之后自动弹出对话框,显示汇编结果,程序如下。
//弹出对话框子函数
void CChildView::BuildDlg()
{
CReportDlg m_ReportDlg;
CString m_strRunFileLst;
m_strRunFileLst = m_strRunFileName; //获取被编译文件的文件名
m_strRunFileLst += ".lst";//加上扩展名LST以便寻找并打开LST文件
CFile file1(m_strRunFileLst,CFile::modeRead);//以读方式打开LST文件
char* showBuf;
DWORD Buflen;
Buflen = file1.GetLength();
showBuf = new char[Buflen+1];
file1.Read(showBuf,Buflen); //读出LST文件内容
file1.Close();//关闭LST文件
CString m_strResult = showBuf;
m_ReportDlg.m_strReport= "\r\n 汇编总结报告:\r\n";
m_ReportDlg.m_strReport += m_strResult.Right(174); //截取文件最后几行的编译结果
m_ReportDlg.m_strReport +="\r\n";
m_ReportDlg.m_strReport +="\r\n";
m_ReportDlg.m_strReport +="\r\n"; //加两空白行,使背景面积扩大
m_ReportDlg.SetTitleName("Assembling Report");
UpdateData();
m_ReportDlg.DoModal();//弹出编译结果对话框
delete showBuf; //释放缓存变量
}
3 结束语
该文用C++实现了MASM集成汇编系统,介绍了该系统的主要功能,重点给出了启动界面、编译功能的实现方法和部分程序。该系统的应用,消除了调试汇编语言程序时切换到DOS的麻烦,使学生学习汇编语言程序设计变得轻松愉快!
参考文献:
[1] 苏建元.主动学习——想学习?会学习?不断学习[J].计算机教育,2007,(2):60-62.
[2] 苏建元.大学计算机硬件技术课程启发式教学要点[J].计算机教育(增),2005,(12):82-83.
[3] 苏建元.计算机学习中逻辑思维和系统思维能力的培养[J].电脑知识与技术(学术交流),2007,(2):585-586.
关键词:汇编语言;微机;教学;Visual C++;Windows
中图分类号:G640文献标识码:A文章编号:1009-3044(2008)23-966-03
The Research and Development of MASM Integrated Assemble System in Windows
SU Jian-yuan, FANG Jian, WANG Ling-ling, LIANG Hong-yan, ZHAO Xin
(College of Electrical Engineering,Hehai University, Nanjing 210024, China)
Abstract: In order to satisfy the need of teaching and let students study the programs design method of assembly language, developed MASM integrated assemble system in windows based on VC++. This system included main debugging tools of microcomputer assembly language and its interface is friendly, its operation is simple. It has better application values.
Key words: Assembly language; microcomputer; teaching; visual C++; Windows
1 引言
汇编语言的优点是速度快,可以直接对硬件进行操作,这对诸如图形处理等关键应用是非常重要的。作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。但是,现有的宏汇编编译工具主要还是工作在DOS环境中,虽然DVCC-8086H开发环境是Windows,但软件不能独立运行,必须连接仿真设备才行。该文运用Visual C++开发了一种Windows下MASM集成汇编系统。
2 系统主要功能及其实现
Windows下MASM集成汇编系统主要实现以下功能:
1)能在该系统中编写程序并可以对程序进行编辑、保存、打印,自动提供微机汇编语言程序的分段框架结构;
2)对ASM文件进行编译,可运用指令ShellExecute(NULL,"open"," masm.exe的全路径名",m_strCmd,NULL,SW_HIDE)调用masm.exe应用程序完成编译功能。为了方便用户,编译之后自动跳出编译结果,还可以通过查询List文件和Cross文件修改程序中的错误,为了边看文件边修改错误,将List文件和Cross文件的对话框设置成非模态对话框;
3)对OBJ文件进行联接,调用link.exe文件,联接后显示提示信息;
4)对EXE文件或COM文件进行动态调试;
5)启动画面中显示软件名称和版权等提示信息,使用动画可以减少等待程序加载过程中的枯燥感;
6)其它设置。如字体设置,新建窗口、层叠、平铺和排列图标等窗口的设置,左缩进设置等。
下面重点讨论启动界面和编译功能的实现方法。
2.1 启动界面的实现
启动界面如图1所示。应用VC++制作系统启动画面基本步骤如下:
1)用Photoshop等工具制作启动画面图象,保存为bmp格式。
2)用Appwizard建一个基于单文档的Splash。
3)在资源中插入点阵图资源。打开VC++的资源编辑器,用鼠标右键按一下Resources文件夹,选择Import命令,插入所制作的点阵图。如果点阵图超过256色,VC++会弹出对话框,提示点阵图已经插入但不能在点阵图编辑器中显示,将点阵图ID改为IDB_SPLASH。
4)添加Splash Screen控件。选择菜单“project”/“Add To Project”/“Conponents and Controls”打开对话框,在对话框中连续按两下"Visual C++ Conponents"选项,选择“Splash Screen”控件,然后按一下“Insert”。 确认或修改类名和点阵图资源ID,按OK确认。 选择、连接后,启动画面就显示出来了。
5)如果需要改变启动画面的停留时间,就修改SetTimer()函数的第二个参数,默认是750毫秒。
int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{ SetTimer(1, 750, NULL); //修改第二个参数以调整画面停留时间
return 0;}
2.2 编译功能的实现
实现编译功能的部分程序如下:
//编译子函数,调用masm.exe
void CChildView::masm(CString lpfilename)
{
//构造全路径命令行参数
……
//调用masm.exe进行编译
ShellExecute(NULL,"open",strCmdLine,m_strCmd,NULL,SW_HIDE);
m_strRunFileName = filename;
//将文件名保存以便连接和运行使用
//等待0.1秒,等待汇编完成,产生*.CRF、 *.OBJ、 *.LST文件
Sleep(200);
BuildDlg();//弹出编译结果汇报对话框
m_ListMenu = TRUE; //使能“查看LIST文件”菜单
m_CrossMenu = TRUE;//使能“查看CROSS文件”菜单
m_LinkMenu = TRUE; //使能“连接”菜单
//这时的菜单查看LIST文件、查看CROSS文件和连接都变黑。如图2所示。
}
编译完之后自动弹出对话框,显示汇编结果,程序如下。
//弹出对话框子函数
void CChildView::BuildDlg()
{
CReportDlg m_ReportDlg;
CString m_strRunFileLst;
m_strRunFileLst = m_strRunFileName; //获取被编译文件的文件名
m_strRunFileLst += ".lst";//加上扩展名LST以便寻找并打开LST文件
CFile file1(m_strRunFileLst,CFile::modeRead);//以读方式打开LST文件
char* showBuf;
DWORD Buflen;
Buflen = file1.GetLength();
showBuf = new char[Buflen+1];
file1.Read(showBuf,Buflen); //读出LST文件内容
file1.Close();//关闭LST文件
CString m_strResult = showBuf;
m_ReportDlg.m_strReport= "\r\n 汇编总结报告:\r\n";
m_ReportDlg.m_strReport += m_strResult.Right(174); //截取文件最后几行的编译结果
m_ReportDlg.m_strReport +="\r\n";
m_ReportDlg.m_strReport +="\r\n";
m_ReportDlg.m_strReport +="\r\n"; //加两空白行,使背景面积扩大
m_ReportDlg.SetTitleName("Assembling Report");
UpdateData();
m_ReportDlg.DoModal();//弹出编译结果对话框
delete showBuf; //释放缓存变量
}
3 结束语
该文用C++实现了MASM集成汇编系统,介绍了该系统的主要功能,重点给出了启动界面、编译功能的实现方法和部分程序。该系统的应用,消除了调试汇编语言程序时切换到DOS的麻烦,使学生学习汇编语言程序设计变得轻松愉快!
参考文献:
[1] 苏建元.主动学习——想学习?会学习?不断学习[J].计算机教育,2007,(2):60-62.
[2] 苏建元.大学计算机硬件技术课程启发式教学要点[J].计算机教育(增),2005,(12):82-83.
[3] 苏建元.计算机学习中逻辑思维和系统思维能力的培养[J].电脑知识与技术(学术交流),2007,(2):585-586.