汇编语言课程设计文本方式下字处理程序的设计与实现_第1页
汇编语言课程设计文本方式下字处理程序的设计与实现_第2页
汇编语言课程设计文本方式下字处理程序的设计与实现_第3页
汇编语言课程设计文本方式下字处理程序的设计与实现_第4页
汇编语言课程设计文本方式下字处理程序的设计与实现_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、汇编语言课程设计-文本方式下字处理程序的设计与实现学号:课程设计文本方式下字处理程序的设计与题目实现学院计算机科学与技术专业计算机科学与技术班级计算机班2 / 37姓名指导教师2012年1月3日汇编语言课程设计-文本方式下字处理程序的设计与实现3 / 37目录1 .问题描述错误!未指定书签。L1问题描述错误!未指定书签。L2主要任务错误!未指定书签。1.3测试数据错误!未指定书签。2设计中使用的关键技术和方法错误!未指定书签。2.1 使用的关键技术错误!未指定书签。2.2 调试环境错误!未指定书签。错误!未指定书签。错误!未指定书签。3.设计方案说明1 .1模块层次图及模块说名1.1.1 模块

2、层次图错误!未指定书签。1.1.2 模块说明错误!未指定书签。2 .2算法描述错误!未指定书签。3 .3数据结构说明错误!未指定书签。4 .4程序界面的描述错误!未指定书签。3. 5程序功能的概述.4.测试及评估4.1 调试中的问题.4. 2主要功能的调试.5.设计心得5.1 感受和体会5. 2对程序改进的想法.错误!未指定书签。 错误!未指定书签。 . .错误!未指定书签。 .错误!未指定书签。 错误!未指定书签。 .错误!未指定书签。 -错误!未指定书签。 错误!未指定书签。6. 附录源程序本科生课程设计成绩评定表错误!未指定书签。汇编语言课程设计-文本方式下字处理程序的设计与实现课程设计

3、任务书学生姓名:专业班级:计算机班指导教师:工作单位:计算机科学与技术学院题目:文本方式下字处理程序的设计与实现初始条件:理论:完成了汇编语言程序设计课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。实践:完成了汇编语言程序设计的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)理解键盘接口的工作原理,掌握BIOS键盘I/O功能,掌握复杂内存数据结构的定义和管理方法。具体的设计任务及要求:1)清晰且易于操作的用户界而;动态显示光标的当前位置:2)在

4、文本编辑区接受并保存输入信息:3)光标上移,下移,左移,右移;4)允许删除当前光标后的字符;将编辑文本存盘,读出并显示硬盘中的指定文件。(任选)在完成设计任务后,按要求撰写课程设计说明书:对课程设计说明书的具体要求请见课程设计指导书。阅读资料:1)IBMPC汇编语言程序设计实验教程3.3节2)IBMPC汇编语言程序设计(第2版)9.1节时间安排:设计安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试,和验收。周5:撰写课程设计报告。指导教师签名:2012年1月3日系主任(或责任教师)签名:2012年1月3日课程设计报告书1 .问题描述1.1 问题描述理解键盘接口的工作原理,掌握

5、BIOS键盘I/O功能,掌握复杂内存数据结构的定义和管理方法;用汇编语言设计一个简单的文本编辑软件。1.2 主要任务具体的设计任务及要求:(1) .清晰且易于操作的用户界面;动态显示光标的当前位置;(2) .在文本编辑区接受并保存输入信息;(3) .光标上移,下移,左移,右移;(4) .允许删除当前光标后的字符;(5) .将编辑文本存盘,读出并显示硬盘中的指定文件。1.3 测试数据编写好源代码后,进行调试,主要调试数据有:新建一个文本,输入适当的内容,保存;打开一个已经保存的文件。2设计中使用的关键技术和方法2.1 使用的关键技术编程中主要使用的汇编技术有:(1) .汇编语言的中的各种寻址(2

6、) .存储等命令及BIOS中断和DOS中断调用(3) .窗口的建立(4) .功能键的定义(5) .子程序的调用等。2. 2调试环境主要用到的调试工具有:windos环境下的DOS、MASM汇编器、LINK链接软件、DEBUG软件。9 / 373.1.2模块说明子程序和宏简要说明:子程序名功能说明mainprocfar主程序windowprocnear创建一个编辑窗口editprocnear编辑输入的字符nienu_showprocnear显示菜单,定义各一、级二菜单newprocnear新建文件openprocnear打开文件saveprocnear保存文件saveasprocnear文件另存

7、为fuc_keyprocnear定义各功能键子程序win3procnear显示系统当前日期savedisplayprocnear保存输入的文本fontprocnear提取系统当前时间4 / 37汇编语言课程设计-文本方式下字处理程序的设计与实现win4procnear显示行列setcolorprocnear设置编辑区的背景颜色commandprocnear显示功能菜单commandhelpprocnear显示帮助信息quittprocnear退出前处理程序宏名宏功能说明read_chrmacro读取字符宏定义,返回的字符码,ah二扫描码stringmacropl显示字符串信息winmacroo

8、prl,opr2,opr3,opr4,opr5,opr6建立窗口,al=oprl上卷行数、bh=opr2卷入行属性、ch=opr3左上角行号、cl=opr4左上角列号、dh=opr5右下角行号、dl=opr6左下角列号pos_cursemacroop1,op2,op3设置光标位置,bh=opl页号、dh=op2行、dl=op3列pos_getmacro读取光标位置,瓶=页号3. 2算法描述本次程序流程图如下9 / 373.3数据结构说明本程序数据结构主要为数据段程序数据段:datasegmentdatasegment;定义数据段flagdw?color_1db19dup(M)JWhite_to

9、_Black13,10,$color_2db19dup(,r):White.to_Red;l3,10,$color_3db19dup(M)/White_to_Blue13,10,$menudbTileOptionsHelpS,messdb'F1-FileF2-OptionsF10-helpEsc-quit','$'manualdb*Newl3,10,'$'manu_2db,Open13,10,'$'manu_3db,Savel3,10,'$'manu_4dbfSaveas13,10,'$'manu_

10、5db,Exit7$,manu_6db1Odup(H)/Colorl3,10,'$'manu_8db21dup("),'Command',13,10/$,manu_9db21dup(H);About;13/0,'$'handledw?mess1db,Pleaseinputafilename:,$,mess2db,Pleaseinputasavingfilename:V$,mess3db,Pleaseinputanopenfilename:,$,mess4db'Thefilehasnotsaved!Saveitnow?(Y/N):

11、V$,pathdb50dup(0)/$,bufferdb2000dup(?)bakdb3850dup(0)linedb?rowdb?chardb?help_masOdb,AboutThisEditor$,helpmas1db'*$'帮助内容help_mas2db,*Thanksforusingthiseditor!*$,help_mas3db,*help_mas4db1*MS-DOSEditor*$,help_mas5db,*CopyrightPowerbyPP2012.1*$'helpmas6db'*$'$'com_messOdb,EditCo

12、mmands$,commessldb*com_mess2db,Home-Movetothestartofthecurrentline.5,com_mess3db,End-Movetotheendofthecurrentline.$,com_mess4db,Delete-Deletethecharacterthatthecursorison.S,com_messSdbBackspace-Deletethecharactertotheleftofthecursor.S1commess6db,Ctrl+Up-Scrolkiponeline.5,com_mess7db,Ctrl+down-Scroll

13、downoneline.5,com_mess8db,Ctrl+Left-Moveleftoneword.$,com_mess9db,Ctrl+right-Moverightoneword.$,com_mess1Odbnter-Startanewline.S*com_mess11dbTab-Movethecursortonexttabstop.S1datedb'DATE:0000/00/00S'ffl日期hangliedb'Lin:000/Com:000$'行列timedbTIME:00:00:00$'调用时间dataends3 .4程序界面的描述主程序界

14、面:4 .5程序功能的概述本程序主要为模拟记事本功能,参考教材8,9,10,11章和实验教程3.3节。该编辑程序要求具备的功能:清晰且易于操作的用户界面,在出现的界面,中输入任意文本内容,利用DEL键、BACKSPACE键、HOME键、END键、上下左右光标键对文本进行全屏幕编辑。按F1键激活菜单FILE,下移光标,选择SAVE,输入文件名,文本的存盘。按F10激活帮助,按ESC键退出帮助。可以选择FILE菜单的其他菜单项,完成打开文件,文字的插入、删除、修改文本行、列号的动态显示等功能。主要使用说明:进入主界面,在编辑区输入任意的内容,而后按下F1进行功能选择,主要选择功能有:new、ope

15、n、save%saveas%exit;new表示新建一个文本,open可以打开硬盘上的一个已经保存的文件,读取该文件,并将内容显示在文本编辑区内,save可以保存当前文件,选择后需输入文件名字,文件可以是绝对和相对路劲,若在文件名字中不输入文件的路径,则默认将文件保存在和程序同一目录下,saveas功能和save差不多,exit退出编辑,若文件还未保存,则提示是否保存,若选择是,则输入相关文件名进行保存,若选择否,则不保存文件退出。按下F2后,进入。ptions功能选项,主要功能为改变编辑区的背景颜色,选择相关的功能:White_to_Black可是文本背景颜色变成黑色;Whiteo_Red可

16、是文本背景颜色变成红色;Whiteo_Blue可是文本背景颜色变成蓝色。按下F10后进入此文本编辑器说明,其中command主要是本文本编辑器使用说明,about主要为本文本编辑器作者信息说明。5 .测试及评估5.1 调试中的问题经过对汇编语言的键盘输入、文件保存、文件打开、编辑窗口的建立、窗口颜色设置等相关知识的研究后,即进行程序的设计和编码;将原程序编好后,经过汇编,有如下儿个问题:最开始在属性栏现实编辑器的功能选项时,功能菜单不能和相关功能名字很好的对其,即功能名字和功能菜单显示的坐标不相对应,经过仔细研究分析,最终通过控制菜单显示的位置控制宏pos.curse,通过控制菜单显示的页号、

17、行号、列号以及标记菜单区大小的winmacrooprl,opr2,opr3,opr4,opr5,opr6,通过控制菜单区开始的位置和结束位置。控制其显示大小,二者结合控制,最终将菜单显示和功能名称显示对齐。在激活某个功能菜单时,还未按下enter进行真正的选择时,该功能应该用不同的样式标记,本程序采用的是激活时为黑底黄字,但是由于程序的疏忽和未考虑完善,在激活该功能时其他功能菜单不见了,经过分析,由于程序在激活某个功能时未将其他功能也显示出来,如:winO,06h,4,1,4,7pos_curseO,4,0汇编语言课程设计-文本方式下字处理程序的设计与实现11 / 37选择相关的功能:Whit

18、e.to_Black可是文本背景颜色变成黑色;White_to_Red可是文本背景颜色变成红色;White_to_Bkie可是文本背景颜色变成蓝色。选择Help共能后,即按下F10后的界面:选择help的Commond界面:*MS-DOSEditor* Copyright: Pov/erby PP 2012.1 *12 / 37Fl-FileF2-0ptionsFID-helpEsc-quitLin:091/Coms000运行生成的ppeditor.exe文件,进入上述的主界面;在其中输入:HelloWorld!而后点击保存,输入名字:test.txt,将上述内容保存在当前文件夹下面,主要操作

19、图:国名令提乐符-ppeditor口!回"与FileOptionsHeIpDATE:2012/01/02NewId?OpenSaueSaueasExit一汇编语言课程设计-文本方式下字处理程序的设计与实现在当前文件夹下有test.txt文件担织 鼻打开 打印新应件先脏 Da籁名程修改E期型大小下我.temp2012/1/2 23:33文件夹工融尸 link.exe2011/10/19 17:43应用程后39 K出层近访问的位目EZ masm.EXE2011/9/30 12:52城®?101 K1 ppcditor.osm2012/1/2 2LL7ASM文件27 KC库记 P

20、PEDnOR.EXE2012/1/2 21:20述胡12 M叫宕风衫Witi 1 PPED1TOR.OBJ2012/1/2 2L20OBJ文件8 KQ TEST.TXT2012/1/2 23:34文本文档2K打开15 / 37test.txt文件,内容如下:|7ESI.TXT-3$区文偿也辐格式(O)查石IV)帮助(H)HelloWorldl-可见保存的内容与程序输入内容一样!在当前目录下新建一个test2.txt文件,内容为:WelcomeToComputerScienceAndTechnologyOfWHUT!,用其打开:可见打开的文件与test2.txt文件内容一样!修改上述打开的文件内

21、容为:WelcomeToConiputerScienceOfWHUT!,然后保存,结果为:可见保存后的文件内容与文本编辑区内容不太一样,这也是程序存在的问题之一!6 .设计心得包括设计中遇到的问题及思考,对该程序进一步改进扩展的设想。5.1感受和体会IBMPC汇编语言程序设计这门课程是计算机专业一门基础性学科,重要性可见一斑,学好这门课程对以后学习具有深远的影响。而课程设计便是对学习效果的检验。课程设计不仅可以锻炼我们独立思考问题、解决问题的能力,而且可以培养我们的整体性思维的能力;通过课程设计,使我了解了很多汇编语言应用的知识,比如:键盘输入、中断处理程序B0ISINT16H和INT21H、

22、文件打开与保存等。虽然一开始对于此次课设的题目一头雾水,不知从何下手,但是最后通过查阅课本相关内容和实验手册的相关内容,最后渐渐明白;键盘输入程序的实现依赖于PC机中对键盘盘管理的中断机构和8255可编程控制外围接口芯片,在8255芯片中有两个端口PA(60H)和PB(61H),在这个硬件的基础上,系统在BIOS中一配置了键盘服务功能,因此用户可以实现键盘输入;当在键盘上“按下”或“放开”一个键时,如果键盘的中断允许位(21H端口第一位为0),就会产生一个类型为9的中断,并转入BIOS的键盘中断处理程序,键盘上每个键对应于一个扫描码,从01到83,通过扫描码便可以唯一确定是哪个键改变了状态:中

23、断处理程序BOISI'T16H和IT21H有相关的功能实现字符的输入:此外要在显示器上显示输入的内容,就必须了解显示器的工作和控制,主要参数为:字符显示的行列、显示的颜色等,通过BIOS的显示中断INT10H的相关参数设置,从而达到控制光标的位置,读取光标的位置,选择显示页,清屏和卷屏;写入一个新的文件或者用同一个文件名重写一个旧文件时,首先要建立文件并赋予给它一个属性,如果DOS发现要建立的文件已经存在时,原来的文件将被破坏,通过movah3chleadxpathnmint21h可以实行在硬盘上写入一个文件,其中pathnm为文件的名字缓存区名;打开文件(3DH)要检查文件名是否合法

24、,文件是否有效,利用movah3dhleadxpathnmint21h可以实现读取一个文件,其中pathnm为文件的名字缓存区名。这次课程设计,我明白了对于编写程序,解题的思路尤为重要。在编写程序之前,如果没有比较清晰的思路,根本不可能编出好的程序。就算马马虎虎的编出来,程序的逻辑性、健壮性、完善性、合理性也不会很强。在编程之前,我们应反复研究题目要求,对题目涉及的情况进行比较充分的分析,以便编写出更加符合题意的程序;其次要充分考虑各种临界情况,对一些错误的输入进行处理。因此在我们编程序之前一定要做好充分的准备,首先要理清自己的思路,然后再将思路分划成几个模块,逐块的写好算法,最后再将所有的模

25、块有机的联系起来,组成一个完整的程序。在成功通过编译的情况下,对程序运行的结果进行系统的分析,检验其正确性,如果有错误,应立即去分析源程序的逻辑错误,直到得到正确的结果。汇编语言课程设计-文本方式下字处理程序的设计与实现在这次课程设计的过程中,我也遇到了很多难题。在种种的困难中,我明白了在编写程序时要有耐心。如果你没有耐心,即使再好的思路也不会得到很好的表达,特别是在调试的过程中,对于各种各样的错误,要特别的有耐心去自习分析原因,特别是一些基本的语法错误,不能一看到错误很多就乱了阵脚,更不能轻易的放弃,半途而废。通过此次课程设计,再次对汇编语言的基础知识和一些实际操作只是有了一定的了解,对汇编

26、语言这样的直接操作机器硬件感到无比的神奇和浓厚的兴趣。5 .2对程序改进的想法本程序有很多不完善的地方,例如:在文本编辑区通过上下键移动光标时,移动后的光标坐标的列并没有改变、删除一个字符时,必须将光标放在该字符上、用delete删除一个字符时,该字符所占的空间依然存在、输入的保存文件名一旦输入不能修改、部分字符保存后存在乱码等等。对于初学者,存在问题很正常,由于时间有限,不能很好的查阅相关资料来完善程序,修改相关的BUG,因此,在课后争取查阅相关资料来完善这个程序,修改上述BUG,力争实现和记事本相类似的功能。6 ,附录源程序本次源程序如下:read_chrmacro;读取字符的宏定义mov

27、ah,0;返回的al=字符码,ah=扫描码inti6hendm _stringmacrop1;显示字符串信息movah,9leadx.plint21hendmwinmacrooprl,opr2,opr3,opr4,opr5,opr6;建立窗口宏定义movah,06h:0pr1=页号,opr2二卷入行属性moval,oprl;opr3二左上角行号,opr4=左上角列号movbh,opr2;opr5=右上角行号,opr6=右上角列号movch,opr3movcl,opr4movdh,opr5movdLopr6intiOhendmpos_cursemacroop1,op2,op3;定义光标位置mov

28、ah20Pl=页号,0p2二行号,0p3二列号16 / 37汇编语言课程设计-文本方式下字处理程序的设计与实现movbh.oplmovdh,op2movdl,op3intiOhendmhelp_masOdb,AboutThisEditor$,helpmas1db'*$;帮助内容help_mas2db1*Thanksforusingthiseditor!*$,helpnas3db'*一4>help_mas4db'*MS-DOSEditor*$'pos_getmacro;读取光标位置movah,03hmovbh,0intiOhendmhelp_mas5db1*

29、CopyrightPowerbyPP2012.1*$'helpmas6db'*$com_messOdb,EditConimands$,com-messldb*木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木木datasegment;定义数据段flagdw?colordb19dup(M)JWhite_to_Black13/0/$'color_2db19dup(M):White-to_Red;13,10,$color_3db19dup(M)/White_to_Blue13,10,'$'menudbTileOptionsHelpS1m

30、essdb'F1-FileF2-OptionsF10-helpEsc-quit,manualdb,New:13,10,'$'manu_2dbfOpenl3,10,'$'manu_3dbsave',13/0,'$'manu_4dbfSaveas13,10,'$'manu_5db,Exit,$,manu_6db10dup(H)/Color13J0,$manu_8db21dup("),'Command;13J0,$manu_9db21dup(M);About;13/0,'$'handle

31、dw?mess1db,Pleaseinputafilename:V$,mess2db,Pleaseinputasavingfilename:V$*mess3db,Pleaseinputanopenfilename:7$,4>com_mess2db,Home-Movetothestartofthecurrentline.S1com_mess3db'End-Movetotheendofthecurrentline.S1com_mess4db,Delete-Deletethecharacterthatthecursorison.$,com-messSdb'Backspace-D

32、eletethecharactertotheleftofthecursor.$,com_mess6db,Ctrl+Up-Scrolkiponeline.5,com_mess7db'Ctrl+down-Scrolldownoneline$com-messSdbtrl+Left-Moveleftoneword.Scom_mess9db'Ctrl+right-Moverightoneword$com_mess1Odb'Enter-Startanewline$com_mess11dbTab-Movethecursortonexttabstop$datedbDATE:0000/0

33、0/00$,调用日期hangliedb'Lin:000/Com:000$'行列timedbTIME:00:00:00$t调用时间dataendsmess4db,Thefilehasnotsaved!Saveitnow?(Y/pathdb50dup(0)/$,bufferdb2000dup(?)bakdb3850dup(0)linedb?rowdb?chardb? 木木东木木东木木东木木东木木 ,木木木木木木5C木木木木5C木木木木5C木木木codesegmentmainprocfar;主程序 assumecs:code,ds:datastart:movax,data movds

34、,ax callwindow;创建窗口子程序 calledit;编辑输入的字符retmainendpmenu_sho wprocnear;显 示菜单 callsavedisplaypushexcmpah,3bhjzmenu_filel;Fl 功能 File cmpahJchjzmenu_optionsl ;F2 功能 Options cmpah,44hjzmenu_helpl;F10 功能 Help jmpchar_getwindowprocnear;仓ij建窗口子程序 win0,70h,l ,0,24,79;定义窗 口背景 winl,3fh,0,0,0,79win0,3fh,24,0,24,

35、79pos_curse0,0,1 ;显示菜单位置及内容 stringmenupos_curse0,24,1 ;显示状态栏位置及内容 stringmesscallwin3;显示日期pos_curseO, 1,0callwin4;显示行/列pos-curseO, 1.0 movrow,dh:dh=l movline,dl;dl=0 ret windowendpmenu_filel:jmpmenu_file menu_optionsl: jmpmenu_options menu_helpl: jmpmenu_helpmenu_file:;定义菜单的背景字体颜色 pos_getpushdxwin0,8

36、0h,l,0,6,8;建立菜单子窗口pos_curseO, 1,0 stringmanu-l stringmanu_2 stringmanu-S stringmanu_4 stringmanu_5 popdx decdlpos_curseO,dh,dlcopmar:read_chr;从I/O读取字符cmpah,50h;向下jzmanu_njmpmanujiideditprocnear;编辑输入的字符char_get:;读字符callcomreteditendpmanu_hid:;菜单隐藏winOJehJ,1,7,50callbackdisplayjmpchar_getmanu_n:;开始定义各

37、个菜单项win0,80h51,5,7pos_curse0,5,0stringmanu_5win0,80h,2,l,2,7pos_curse0,2,0stringmanu_2win0,06h,l,l,l,7pos_curseO,1,0stringmanu_lread-chrcmpah,48h;向上jemanu_ee;exitcmpal,Odh;按回车键选中jznew_l;newcmpah,50h;向下jemanu_o;openjmpmanu_hidmanu_ee:jmpmanu_e;newtoexitnew:callnewmanu_nn:jmpmanu_n;opentonewmanu_o:jmp

38、manujiid open: jmpopen manu_oo: jmpmanu_o;savetoopen manu-s:win0,80h,2,1,2,7 pos_curse0,2,0 stringmanu_2 win0,80h,4,l,4,7 pos_curse0,4,0 stringmanu_4 win0,06h,3,l,3,7 pos_curse0,3,0 stringmanu_3 read_chr cmpaLOdh jzsave_l;save cmpah,48h jemanu_oo;open cmpah,50h jemanu_a;saveas jmpmanujiid save: call

39、savemanu_ss: jmpmanu_s;saveastosave manuka:win0,80h,3,l,3,7 pos_curseO,3,0 stringmanu_3 win0,80h,5,5,7 pos_curse0,5,0 stringmanu_5 win0,06h,4,1,4,7 pos_curse0,4.0 stringmanu_4 read_chr cmpahJch jzsave_2;saveas cmpah,48h jemanu_ss;save cmpah,50h jemanu e;exitwin0,80h,l,l,l,7pos_curseO,1,0stringmanu_l

40、win0,80h,3,l,3,7pos_curse0,3,0stringmanu_3win0,06h,2,1,2,7pos_curse0,2,0stringmanu_2read_chrcmpah48hjemanu_nn;newcmpaLOdhjzopen_l;opencmpah,50hjemanus;savejmpmanu_hidmanu_n2:jmpmanu_nmanu_as:jmpmanu_asave_2:callsaveasmanure:win0,80h,4,1,4,7pos_curse0,4,0stringmanu_4win0,80h,l,l,l,7pos_curseO,1,0stri

41、ngmanu_lwin0,06h,5,l,5,7pos_curseO,50stringmanu_5read_chrcmpah,50hjemanu_n2;newcmpah,48hjemanu_as;saveascmpahjchjeexit;exitjmpmanu_hidexit:movah,4chint21hret;结束,退出程序menu_options:pos_getpushdxwin0,80h,l,10,2,18pos_curseO,150stringmanu_6popdxdecdlpos_curseO,dh,dlread_chr;从I/O读取字符cmpah,50h;向下jzmanu_col

42、orjmpmanu_hidmanu_color:win0,06h,1,10,1,16pos_curseO,1,0stringmanu_6read_chrcmpah,4dh;向右jzmanu_colorl;colorcmpaLOdh;按回车键选中jzmanu_colorl;color需要调用color二级子callbackdisplaywinOQfh,14,9,16,60pos_curseO/5,9movdh,15movdl.9movbhJOhmovah,2intiOhstringmess4movah,1int21hcmpaL79hjnzqcallquittq:cmpaL6ehjzquitqui

43、t:win0,07h,0,0,24,79pos_curse0,0,0菜单jmpmanu_hidmanu-colorl:jmpmanu_.subcolormanu_colorl1:jmpmanu.colormanu-subcolor:pos_getpushdxwin0,80h,l,19,4,34pos_curseO,1,0stringcolor_lstringcolor_2stringcolor_3win0,80h,l,10,2,18pos_curseO,1,0stringmanu_6popdx33 / 37decdlpos_curseO,dh,dlread_chr;从I/O读取字符cmpah,

44、50h;向下jzmanu_subcolorlcmpah,4dhjzmanu_subcolorljmpmanu_hidmanu_subcolorl:win0,80h,3,19,3,34pos_curse0,3,0stringcolor_3win0,80h,2,19,2,34pos_curse0,2,0stringcolor_2win0,06h,1,19,1,34pos_curseO,1,0stringcolorwin0,80h,1,10,2,18pos_curse0J,0stringmanu_6read_chrcmpah,48h;向上jemanu_subcolor33;cmpal,0dh;按回车

45、键选中jzmanu_chcolorl;cmpah,50h;向下jemanu_subcolor2;jmpmanu_hidmanu_subcolor33:jmpmanu_subcolor3manu_chcolorl:movflag,1callsetcolormanu_subcolor2:win0,80h,3/9,3,34pos_curse0,3,0stringcolor_3win0,80h1,19,l,34pos_curseO,1,0stringcolorwin0,06h,2,19,2,34pos_curse0,2,0stringcolor_2win0,80h1,10,2,18pos_curse0

46、,150stringmanu_6read_chrcmpah,48h;向上jemanu_subcolorl1;cmpalQdh;按回车键选中jzmanu_chcolor2;cmpah,50h;向下jemanu_subcolor3;jmpmanu_hidmanu-subcolorl1:jmpmanu_subcolorlmanu_chcolor2:movflag,2callsetcolormanu-subcolorS:win0,80h,2,19,2,34pos_curse020stringcolor_2win0,80h,l,19,l,34pos_curse0,1,0stringcolorwin0,0

47、6h,3,19,3,34pos_curse0,3,0stringcolor_3win0,80h,10,2,18pos_curse0,1,0stringmanu_6read_chrcmpah,48h;向上jemanu_subcolor22;cmpalQdh;按回车键选中jzmanu_chcolor3;cmpah,50h;向下jemanu_subcolorl11;jmpmanujiidmanu_subcolor22:jmpmanu_subcolor2manu_subcolorl11:jmpmanu_subcolorlmanu-chcolorS:movflag,3callsetcolormenuhe

48、lp:jmpmanujiid manu-command 1: jmpmanu_command manu_aboutO:callhelp;调用about子菜单 jmpmanu_hid menu-showendpcomprocnear;定义功能键pos_get;根据键盘的输入,确定文本编辑的 各种功能movrowjh movlineJl first:pos_c u rseO,rowJ i nej00:movah,0intl6h;从键盘读字符ah=扫描码al二字符码 pushax leadx,buffer movbufferbx,alincbxcmpah,48h;上jzupcmpah,50h;下jz

49、down_lcmpah,4bh;左 jzleftcmpah,4dh;右jzrightcmpahjch;回车jzenter_lcallfuc_key;调用功能子键movah,2 movdLal int21hpopaxcallmenu_showjmpj6;结束down: jmpdownpos_getpushdxwin0,80h,1,22,2,29;建立菜单子窗口pos_curseO,1,0stringmanu_8stringmanu_9popdxdecdlpos_curse0,dhjlread_chr:从I/O读取字符cmpah,50h;向下jzmanu_commandjmpmanu_hidnia

50、nu_conimand:win0,80h,2,22,2,28pos_curse0,2,0stringmanu_9win0,06h,1,22,1,28pos_curseO,l,0stringmanu_8read_chrcmpah,48hjzmanu_about;aboutcmpaLOdhjzmanu_conimandO;commandcmpah,50hjzmanu_about;aboutjmpmanu_hidnianu_conimandO:callcommand;Hcommand子菜单jmpmanu_hidmanu_about:win0,80h,1,22,1,28pos_curseO,1,0st

51、ringmanu_8win0,06h,2,22,2,28pos_curse0,2,0stringmanu_9read_chrcmpah48hjzmanu_conimand1;conimandcmpaLOdhjzmanu_aboutO;aboutcmpah,50hjzmanuconimand1;commandenter:jmpenter_2up:jmpupleft:;光标左移pos_getmovrow,dhmovdljinecmpline,。jnzdirectmovline,79decrowcmprow,0jestop2jmpfirststop2:jestop1callwin4jmpfirsts

52、topl:movrow,1jmpfirstdown:;下移光标pos_getmovrowjhmovdlJineincrowcmprow,24jestop3callwin4jmpfirststop3:movrow,1jmpfirstdirect:declinecallwin4;显示光标位置jmpfirstright:;光标右移pos_getmovroudhmovdljinecmpline,79jnzdirect2movline,。incrowcmprow,24jereturnsljmpfirstdirect2:inclinecallwin4jmpfirstenter_2:jmpenterup:;

53、上移光标pos_getmovrow.dhmovdljinedecrowcmprow,0movrow,23jmpfirstreturns1:jmpreturnsenter:;回车换行pos_getmovrowjhmovline.dlincrowcmprow,24jereturnsmovline?0callwin4jmpfirstreturns:movrow,24movline,0jmpfirstj6:retcomendpfuc_keyprocnear;功能键子程序next:cmpah,01hjzescape;esccmpah,47h;homejzhomecmpah,4fh;endjz_endcm

54、pah,Oeh:backspacejzbak_spcmpah,53hjzdehdeljmpoverescape:callquitthome:;home键的功能,回到一行的开始pos_getmovrow.dhmovline,0callwin4;修改屏幕上行列的显示值jmpfirst_end:;end键的功能,回到一行的结尾pos_getmovrowjhmovline,79callwin4jmpfirstbak_sp:;退格键的功能pos_getmovrow.dhmovline,dlcmpline,0jestopdeclinejmpabstop:movline50ab:pos_getOjowJin

55、emovah,2movdLOOint21hcallwin4jmpfirstdel:;del删除pos_getmovrow.dhmovline.dldeclinepos_get0,rowjinemovah,2movdLOOint21hinclinecallwin4jmpfirstcm:cmpline,00jzpos_cmpos_cm:pos_curse0,0,0jmpfirstover:retfuc.keyendpsavedisplayprocnear;保存输入的文本pushaxpushbxpushexpushdxpushdsmovax,0002hint33hmovbx,0dmovcx,3840dloopl:movax,0b800h;显示缓冲区的起始地址movds,axmovdLds:bxmovax,datamovds,axmovbakbx5dlinebxlooploop1movax.OOOlhint33hpopdspopdxpopexpopbxpopaxretsavedisplayendpint21hcmpal,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论