汇编语言实现文本编辑器
- 格式:pdf
- 大小:360.88 KB
- 文档页数:14
操作运行界面,在出现的界面中输入任意文本内容,利用DEL键、BACKSPACE键、HOME键、END键、上下左右光标键对文本进行全屏幕编辑,按f1键激活菜单file,下移光标,选择save,输入文件名。
也可以选择FILE菜单的其他菜单项,他们的功能均可实现。
按f10激活帮助,按ESC键退出帮助。
源程序red_chr macro ;读取字符宏定义mov ah,0int 16hendmstring macro p1 ;输入字符光标mov ah,9lea dx,p1int 21hendmwin macro opr1,opr2,opr3,opr4,opr5,opr6 ;建立窗口mov ah,06hmov al,opr1mov bh,opr2mov ch,opr3mov cl,opr4mov dh,opr5mov dl,opr6int 10hendmpos_curse macro op1,op2,op3 ;定义光标位置mov ah,2mov bh,op1mov dh,op2mov dl,op3int 10hendmpos_get macro ;显示光标位置mov ah,03hmov bh,0int 10hendmdata segment ;定义数据段menu db 'File Edit Help $'mass_1 db 'F1 Active file F10 Active help','$'manu_1 db ' New ',13,10,'$'manu_2 db ' Open ',13,10,'$'manu_3 db ' Save ',13,10,'$'manu_4 db ' Save as ',13,10,'$'manu_5 db ' Exit ','$'handle dw ?message1 db ' Please input file name:','$'message2 db ' Please input save file name:','$'message3 db ' Please input open file name:','$'message4 db ' ***The file is not save! Save it now? (Y/N)***: ','$'path db 50 dup(0),'$'buffer db 2000 dup(?)bak db 3850 dup(0)line db ?row db ?char db ?help_mas1 db ' welcome use editor! $' ;帮助内容help_mas2 db 'please the first active help! $'help_mas3 db 'good lucky!! $'help_mas4 db '==========================================================$' help_mas5 db 'Press F1 to active file. $'help_mas6 db 'You can use DOWN cursor key to choose the fuction $'help_mas7 db 'Press F10 to show the help massage.Press Esc To Quit$'date db 'today ??/??/','$';调用日期hanglie db '???//???','$';行//列data endscode segmentmain proc far ;主程序assume cs:code,ds:datastart:push dssub ax,axpush axmov ax,datamov ds,axcall windcall editretmain endpwind proc near ;创建窗口子程序win 0,3eh,1,0,24,79 ;定义窗口背景win 1,1fh,0,0,0,79win 0,1fh,24,0,24,79show: ;显示菜单位置及内容pos_curse 0,0,1mov ah,9lea dx,menuint 21hshow_2: ;显示状态栏位置及内容pos_curse 0,24,1mov ah,9lea dx,mass_1int 21hcall win3call win4pos_curse 0,1,0mov row,dhmov line,dlwind endpedit proc nearchar_get: ;读字符call comcom proc near ;定义功能鍵pos_getmov row,dhmov line,dlfirst:pos_curse 0,row,linej00: mov ah,0int 16h ;从键盘读字符ah=扫描码al=字符码push axlea dx,buffermov buffer[bx],alinc bxcmp ah,48h ;上jz up_1cmp ah,50h ;下jz down_1cmp ah,4bh ;左jz leftcmp ah,4dh ;右jz rightcmp ah,1ch ;回车jz enter_1call fuc_keymov ah,2mov dl,alint 21hpop axcall menu_showdown_1:jmp downenter_1:jmp enter_2up_1: jmp upleft: ;光标左移pos_getmov row,dhmov dl,linecmp line,0jnz directmov line,79dec rowcmp row,0je stop2jmp firststop2:mov row,1jmp firstdirect:dec linecall win4 ;显示光标位置jmp firstright: ;光标右移pos_getmov row,dhmov dl,linecmp line,79jnz direct2mov line,0inc rowcmp row,24je returns1jmp firstdirect2:inc linecall win4jmp firstenter_2:jmp enterup: ;上移光标pos_getmov row,dhdec rowcmp row,0je stop1call win4jmp firststop1:mov row,1jmp firstdown: ;下移光标pos_getmov row,dhmov dl,lineinc rowcmp row,24je stop3call win4jmp firststop3:mov row,23jmp firstreturns1:jmp returnsenter: ;回车换行pos_getmov row,dhmov line,dlinc rowcmp row,24je returnsmov line,0call win4jmp firstreturns:mov row,24mov line,0jmp firstj6:retcom endpfuc_key proc near ;功能键子程序next:cmp ah,47h ;homejz homecmp ah,4fh ;endjz _endcmp ah,0eh ;backspacejz bak_spcmp ah,53hjz delcmp ah,44h ;F10jz help_0rethelp_0: call helphome: ;HOME键的功能pos_getmov row,dhmov line,0call win4jmp first_end: ;END键的功能pos_getmov row,dhmov line,79call win4jmp firstbak_sp: ;退格键的功能pos_getmov row,dhmov line,dlcmp line,0je stopdec linejmp abstop:mov line,0ab:pos_get 0,row,linemov ah,2mov dl,00int 21hcall win4jmp firstdel: ;DEL删除pos_getmov row,dhmov line,dldec linepos_get 0,row,linemov ah,2mov dl,00int 21hinc linecall win4jmp firstcm:cmp line,00jz pos_cmpos_cm:pos_curse 0,0,0jmp firsthelp proc near ;显示帮助信息call savedisplay ;显示帮助信息每行的位置pos_getpush dxwin 0,57h,4,5,21,70pos_curse 0,6,25string help_mas1pos_curse 0,8,11string help_mas2pos_curse 0,10,11string help_mas3pos_curse 0,12,11string help_mas4pos_curse 0,14,11string help_mas5pos_curse 0,16,11string help_mas6pos_curse 0,18,11string help_mas7pop dxpos_curse 0,dh,dlmov ah,0int 16hcmp ah,36h ;F10 active helpjnz clscall helpcls:win 0,1eh,9,10,13,70 ;清屏call backdisplayhelp endpfuc_key endpmenu_show proc near ;显示菜单call savedisplaypush cxcmp ah,3bh ;F1功能jz menu_shjmp char_getmenu_sh: ;定义菜单的背景字体颜色pos_getpush dxwin 0,06h,2,1,7,11win 0,65h,1,0,6,10pos_curse 0,1,0string manu_1string manu_2string manu_3string manu_4string manu_5pop dxdec dlpos_curse 0,dh,dlcopmar:red_chrcmp ah,50hjz manu_njmp manu_hidmanu_hid: ;菜单隐藏win 0,1eh,1,1,7,11call backdisplayjmp char_getmanu_n: ;开始定义各个菜单项win 0,65h,5,1,5,8pos_curse 0,5,0string manu_5win 0,15h,1,1,1,8pos_curse 0,1,0string manu_1red_chrcmp ah,48hje manu_ncmp al,0dhjz new_1cmp ah,50hje manu_ojmp manu_hidmanu_n0:jmp manu_n manu_o:win 0,65h,1,1,1,8pos_curse 0,1,0string manu_1win 0,15h,2,1,2,8pos_curse 0,2,0string manu_2red_chrcmp ah,48hje manu_ocmp al,0dhjz open_1cmp ah,50hje manu_sjmp manu_hid new_1: jmp new_2 manu_s:win 0,65h,2,1,2,8pos_curse 0,2,0string manu_2win 0,15h,3,1,3,8pos_curse 0,3,0string manu_3red_chrcmp al,0dhjz save_1cmp ah,48hje manu_scmp ah,50hje manu_ajmp manu_hid open_1: jmp open_2 manu_n1:jmp manu_n manu_a:win 0,65h,3,1,3,8pos_curse 0,3,0string manu_3win 0,15h,4,1,4,8pos_curse 0,4,0string manu_4red_chrcmp ah,1chjz save_2cmp ah,48hje manu_acmp ah,50hje manu_ejmp manu_hidmanu_n2:jmp manu_n1new_2: jmp newsave_1: call savesave_2: call saveasmanu_e:win 0,65h,4,1,4,8pos_curse 0,4,0string manu_4win 0,15h,5,1,5,8pos_curse 0,5,0string manu_5red_chrcmp ah,50hje manu_n2cmp ah,48hje manu_ecmp ah,1chje exitjmp manu_hidexit:call backdisplaywin 0,07h,15,10,17,61win 0,24h,14,9,16,60mov dh,15mov dl,9mov bh,0mov ah,2int 10hlea dx,message4mov ah,9int 21hmov ah,1int 21hcmp al,79hjnz qcall quittq: cmp al,6ehjz quitquit: win 0,07h,0,0,24,79pos_curse 0,0,0mov ah,4chint 21hretmenu_show endpnew proc near ;新建文件pos_getpush dxcall backdisplaywin 0,07h,15,10,17,61win 0,24h,14,9,16,60,mov dh,15mov dl,9mov bh,0mov ah,2int 10hlea dx,message1cmp al,0dhmov ah,9int 21hmov bx,0all:mov ah,1int 21hcmp al,0dhje alllmov path[bx],alinc bxjmp allalll:win 0,3eh,15,9,17,61pop dxpos_curse 0,dh,dllea dx,pathmov ah,3chmov cx,00int 21hmov handle,axmov bx,axmov ah,3ehint 21hwin 0,3eh,1,0,23,79mov dh,1mov dl,0mov bh,0mov ah,2int 10hjmp char_getnew endpopen_2: jmp opensaveas proc near ;另存为文件;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;win 0,3eh,1,0,6,10call backdisplaywin 0,07h,15,10,17,61win 0,24h,14,9,16,60,mov dh,15mov dl,9mov bh,0mov ah,2int 10hlea dx,message2mov ah,9int 21hmov bx,0bll:mov ah,1int 21hcmp al,0dhje blllmov path[bx],alinc bxjmp bllblll:pos_getpush dxwin 0,3eh,1,0,23,79call backdisplaypop dxpos_curse 0,dh,dllea dx,pathmov ah,3chmov cx,00int 21hmov handle,axlea dx,buffermov bx,handlemov cx,2000mov ah,40hint 21hmov bx,handlemov ah,3ehint 21hcall backdisplayjmp char_getsaveas endpopen proc near ;打开文件call backdisplaywin 0,07h,15,10,17,61win 0,24h,14,9,16,60mov dh,15mov dl,9mov bh,0mov ah,2int 10hlea dx,message3mov ah,9int 21hmov bx,0cll:mov ah,1int 21hcmp al,13je clllmov path[bx],alinc bxjmp cllclll:win 0,3eh,1,0,23,79lea dx,pathmov ah,3dhmov al,0int 21hmov handle,axlea dx,buffermov bx,handlemov cx,2000mov ah,3fhwin 0,3eh,1,23,1,79mov dh,1mov dl,0mov bh,0mov ah,2int 10hmov cx,1000sub bx,bxreplay:mov dl,buffer[bx]inc bxmov ah,2int 21hloop replaymov bx,handlemov ah,3ehint 21hmov dh,1mov dl,0mov bh,0mov ah,2int 10hmov cx,10mov bx,0cleapath_3:mov bl,0mov path[bx],blloop cleapath_3jmp char_getopen endpsave proc near ;保存文件pos_getpush dxwin 0,3eh,1,0,6,10call backdisplaymov ah,pathcmp ah,21hjl j_3jmp j_4j_3:win 0,07h,15,10,17,61win 0,24h,14,9,16,60,mov dh,15mov bh,0mov ah,2int 10hlea dx,message2mov ah,9int 21hmov bx,0dll:mov ah,1int 21hcmp al,0dhje dlllmov path[bx],alinc bxjmp dlldlll:win 0,3eh,1,0,23,79pop dxpos_curse 0,dh,dl j_4: lea dx,pathmov ah,3chmov cx,00int 21hmov handle,axlea dx,buffermov bx,handlemov cx,2000mov ah,40hint 21hmov bx,handlemov ah,3ehint 21hcall backdisplayjmp char_getsave endpsavedisplay proc nearpush axpush bxpush cxpush dxpush dsmov ax,0002hint 33hmov cx,3840dloop1:mov ax,0b800hmov ds,axmov dl,ds:[bx]mov ax,datamov ds,axmov bak[bx],dlinc bxloop loop1mov ax,0001hint 33hpop dspop dxpop cxpop bxpop axsavedisplay endpbackdisplay proc nearpush axpush bxpush cxpush dxpush dsmov bx,0dmov cx,3840dloop11:mov ax,datamov ds,axmov dl,bak[bx]mov ax,0b800hmov ds,axmov ds:[bx],dlinc bxloop loop11pop dspop dxpop cxpop bxpop axretbackdisplay endpquitt proc near ;退出call backdisplaywin 0,07h,15,10,17,61win 0,24h,14,9,16,60,mov dh,15mov dl,9mov bh,0mov ah,2int 10hlea dx,message2mov ah,9int 21hmov bx,0qll:mov ah,1int 21hcmp al,0dhje qlllmov path[bx],alinc bxjmp qllqlll:win 0,07h,15,10,17,61win 0,3eh,14,9,16,60call backdisplaylea dx,pathmov ah,3chmov cx,00int 21hmov handle,axlea dx,buffermov bx,handlemov cx,2000mov ah,40hint 21hmov bx,handlemov ah,3ehint 21hcall backdisplaywin 0,07h,0,0,24,79mov ah,4chint 21hretquitt endpedit endpwin3 proc near ;显示日期mov ah,2ahint 21hmov bl,10dmov ax,0mov al,dhdiv bladd ax,3030hmov [date+6],almov [date+7],ahmov ax,0mov al,dldiv bladd ax,3030hmov [date+9],almov [date+10],ahwin 0,1dh,0,67,0,79pos_curse 0,0,67mov dx,offset datemov ah,09hint 21hretwin3 endpwin4 proc near ;显示行//列mov ah,03hmov bh,0int 10hmov bl,100dmov bh,10dmov ax,0mov al,dhdiv bladd al,30hmov [hanglie+0],almov al,ahmov ah,0div bhadd ax,3030hmov [hanglie+1],almov [hanglie+2],ahmov ax,0mov al,dldiv bladd al,30hmov [hanglie+5],almov al,ahmov ah,0div bhadd ax,3030hmov [hanglie+6],almov [hanglie+7],ahwin 0,1dh,24,60,24,70pos_curse 0,24,61mov dx,offset hangliemov ah,09hint 21hretwin4 endpcode endsend start ;结束。
文本编辑器的程序设计及代码示例在计算机科学领域,文本编辑器是一种用于编辑文本文件的应用程序。
它允许用户创建、修改和保存文本文件,并提供了一系列功能来方便用户进行编辑操作。
本文将介绍文本编辑器的程序设计原理,以及示范几个常见的代码示例。
一、程序设计原理文本编辑器的程序设计需要考虑以下几个方面:1. 用户界面设计:一个好的文本编辑器应具备直观友好的用户界面,提供各种操作选项和快捷键,使用户能够轻松地进行文本编辑。
2. 文本处理功能:文本编辑器应具备基本的文本处理功能,如插入和删除文本、查找和替换、拷贝和粘贴等。
这些功能需要通过合适的数据结构和算法来实现。
3. 文本格式化:文本编辑器应支持对文本进行格式化操作,如自动对齐、缩进、换行等。
4. 多标签支持:多标签功能允许用户同时打开多个文本文件,并在它们之间切换。
这要求程序设计中能够有效地管理多个文本文件的打开、关闭和切换。
二、代码示例下面是几个简单的代码示例,用于展示文本编辑器的一些基本功能。
1. 创建文本文件```pythondef create_file(filename):# 创建一个新的文本文件file = open(filename, "w")file.close()```2. 打开文本文件```pythondef open_file(filename):# 打开文本文件并返回文件对象 file = open(filename, "r")return file```3. 插入文本```pythondef insert_text(file, position, text): # 在指定位置插入文本file.seek(position)content = file.read()file.seek(position)file.write(text + content)```4. 删除文本```pythondef delete_text(file, start, end):# 删除指定位置的文本file.seek(start)content = file.read()file.seek(start)file.write(content[:end - start])```5. 查找和替换文本```pythondef find_replace(file, old_text, new_text):# 在文本中查找指定内容并替换file.seek(0)content = file.read()new_content = content.replace(old_text, new_text)file.seek(0)file.write(new_content)```6. 关闭文本文件```pythondef close_file(file):# 关闭文本文件file.close()```三、总结通过以上代码示例,我们展示了文本编辑器的一些基本功能,包括创建文件、打开文件、插入和删除文本、查找和替换文本以及关闭文件。
简单文本编辑器的设计与实现1. 需求说明用汇编语言设计一个文本编辑器,可以在出现的界面中输入任意文本内容,利用DEL键、BACKSPACE键、HOME键、END键、上下左右光标键对文本进行全屏幕编辑。
按F1键激活菜单File,下移光标,选择New、Open、Save、Exit子菜单项实现文件的新建、打开、保存和退出功能。
按F10激活帮助,按Esc键退出帮助。
2. 设计说明2.1简要分析这个文本编辑器的设计采用了多个模块,有窗口模块、按键模块、光标模块、功能键模块等,而功能键模块中又是调用了按键模块。
为实现文本编辑,通过调用不同的模块达到预期的目的。
2.2概要设计3. 详细的算法描述3.1窗口模块WIN MACRO OPR1,OPR2,OPR3,OPR4,OPR5,OPR6 ;建立窗口 MOV AH,06HMOV AL,OPR1MOV BH,OPR2MOV CH,OPR3MOV CL,OPR4MOV DH,OPR5MOV DL,OPR6INT 10HENDM3.2光标模块POS_CURSE MACRO OP1,OP2,OP3 ;置光标位置MOV AH,02HMOV BH,OP1MOV DH,OP2MOV DL,OP3INT 10HENDMPOS_GET MACRO ;读光标位置MOV AH,03HMOV BH,0INT 10HENDM3.3部分按键模块HOME: ;Home键的功能POS_GETMOV ROW,DHMOV LINE,0JMP FIRST_END: ;End键的功能POS_GETMOV ROW,DHMOV LINE,79JMP FIRSTBAK_SP: ;退格键的功能POS_GETMOV ROW,DHMOV LINE,DLCMP LINE,0JE STOPDEC LINE3.4变量定义DATA SEGMENT ;定义数据段MENU DB ' File Help $'MANU_1 DB ' New ',13,10,'$'MANU_2 DB ' Open ',13,10,'$'MANU_3 DB ' Save ',13,10,'$'MANU_5 DB ' Exit ','$'HANDLE DW ?MESSAGE1 DB ' Please input new file name:','$'MESSAGE2 DB ' Please input save file name:','$'MESSAGE3 DB ' Please input open file name:','$'MESSAGE4 DB ' Save Or Not? (Y/N): ','$'PATH DB 50 DUP(0),'$'BUFFER DB 2000 DUP(?)BAK DB 3850 DUP(0)LINE DB ?ROW DB ?CHAR DB ?HELP_MAS5 DB 'Press F1 to active File. $' ;帮助内容HELP_MAS6 DB 'You can use Downcursor key to choose the fuction. $' HELP_MAS7 DB 'Press F10 to show the help massage.Press Esc To Quit. $'HANGLIE DB '???//???','$' ;行//列DATA ENDS3.5主函数MAIN PROC FAR ;主程序ASSUME CS:CODE,DS:DATASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXCALL WIND CALL EDITRETMAIN ENDP4. 源程序和执行结果4.1源程序RED_CHR MACRO ;从键盘读字符MOV AH,00HINT 16HENDMSTRING MACRO P1 ;显示字符串MOV AH,09HLEA DX,P1INT 21HENDMWIN MACRO OPR1,OPR2,OPR3,OPR4,OPR5,OPR6 ;建立窗口 MOV AH,06HMOV AL,OPR1MOV BH,OPR2MOV CH,OPR3MOV CL,OPR4MOV DH,OPR5MOV DL,OPR6INT 10HENDMPOS_CURSE MACRO OP1,OP2,OP3 ;置光标位置MOV AH,02HMOV BH,OP1MOV DH,OP2MOV DL,OP3INT 10HENDMPOS_GET MACRO ;读光标位置MOV AH,03HMOV BH,0INT 10HENDMDATA SEGMENT ;定义数据段MENU DB ' File Help $'MANU_1 DB ' New ',13,10,'$'MANU_2 DB ' Open ',13,10,'$'MANU_3 DB ' Save ',13,10,'$'MANU_5 DB ' Exit ','$'HANDLE DW ?MESSAGE1 DB ' Please input new file name:','$'MESSAGE2 DB ' Please input save file name:','$'MESSAGE3 DB ' Please input open file name:','$'MESSAGE4 DB ' Save Or Not? (Y/N): ','$'PATH DB 50 DUP(0),'$'BUFFER DB 2000 DUP(?)BAK DB 3850 DUP(0)LINE DB ?ROW DB ?CHAR DB ?HELP_MAS5 DB 'Press F1 to active File. $' ;帮助内容HELP_MAS6 DB 'You can use Downcursor key to choose the fuction. $' HELP_MAS7 DB 'Press F10 to show the help massage.Press Esc To Quit. $'HANGLIE DB '???//???','$' ;行//列DATA ENDSCODE SEGMENTMAIN PROC FAR ;主程序ASSUME CS:CODE,DS:DATASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXCALL WIND CALL EDITRETMAIN ENDPWIND PROC NEAR ;创建窗口子程序WIN 0,3EH,1,0,24,79 ;定义窗口背景WIN 1,1FH,0,0,0,79WIN 0,1FH,24,0,24,79SHOW: ;显示菜单位置及内容POS_CURSE 0,0,1MOV AH,09HLEA DX,MENUINT 21HPOS_CURSE 0,1,0MOV ROW,DHMOV LINE,DLWIND ENDPEDIT PROC NEARCHAR_GET: ;读字符CALL COMCOM PROC NEAR ;定义功能鍵POS_GETMOV ROW,DHMOV LINE,DLFIRST:POS_CURSE 0,ROW,LINEJ00: MOV AH,0INT 16H ;从键盘读字符 ah=扫描码 al=字符码 PUSH AXLEA DX,BUFFERMOV BUFFER[BX],ALINC BXCMP AH,48H ;上JZ UP_1CMP AH,50H ;下JZ DOWN_1CMP AH,4BH ;左JZ LEFTCMP AH,4DH ;右JZ RIGHTCMP AH,1CH ;回车JZ ENTER_1CALL FUC_KEYMOV AH,2MOV DL,ALINT 21HPOP AXCALL MENU_SHOWJMP J6DOWN_1:JMP DOWNENTER_1:JMP ENTER_2UP_1: JMP UPLEFT: ;光标左移POS_GETMOV ROW,DHMOV DL,LINECMP LINE,0JNZ DIRECTMOV LINE,79DEC ROWCMP ROW,0JE STOP2JMP FIRSTSTOP2:MOV ROW,1JMP FIRSTDIRECT:DEC LINEJMP FIRSTRIGHT: ;光标右移 POS_GETMOV ROW,DHMOV DL,LINECMP LINE,79JNZ DIRECT2MOV LINE,0INC ROWCMP ROW,24JE RETURNS1JMP FIRSTDIRECT2:INC LINEJMP FIRSTENTER_2:JMP ENTERUP: ;上移光标POS_GETMOV ROW,DHMOV DL,LINEDEC ROWCMP ROW,0JE STOP1JMP FIRSTSTOP1:MOV ROW,1JMP FIRSTDOWN: ;下移光标 POS_GETMOV ROW,DHMOV DL,LINEINC ROWCMP ROW,24JE STOP3JMP FIRSTSTOP3:MOV ROW,23JMP FIRSTRETURNS1:JMP RETURNSENTER: ;回车换行POS_GETMOV ROW,DHMOV LINE,DLINC ROWCMP ROW,24JE RETURNSMOV LINE,0JMP FIRSTRETURNS:MOV ROW,24MOV LINE,0JMP FIRSTJ6:RETCOM ENDPFUC_KEY PROC NEAR ;功能键子程序 NEXT:CMP AH,47H ;Home键JZ HOMECMP AH,4FH ;End键JZ _ENDCMP AH,0EH ;Backspace键JZ BAK_SPCMP AH,53HJZ DELCMP AH,44H ;F10键JZ HELP_0RETHELP_0: CALL HELPHOME: ;Home键的功能 POS_GETMOV ROW,DHMOV LINE,0JMP FIRST_END: ;End键的功能POS_GETMOV ROW,DHMOV LINE,79JMP FIRSTBAK_SP: ;退格键的功能 POS_GETMOV ROW,DHMOV LINE,DLCMP LINE,0JE STOPDEC LINEJMP ABSTOP:MOV LINE,0AB:POS_GET 0,ROW,LINEMOV AH,2MOV DL,00INT 21HJMP FIRSTDEL: ;Del键POS_GETMOV ROW,DHMOV LINE,DLDEC LINEPOS_GET 0,ROW,LINEMOV AH,2MOV DL,00INT 21HINC LINEJMP FIRSTCM:CMP LINE,00JZ POS_CMPOS_CM:POS_CURSE 0,0,0JMP FIRSTHELP PROC NEAR ;显示帮助信息CALL SAVEDISPLAY ;显示帮助信息每行的位置 POS_GETPUSH DXWIN 0,57H,4,5,21,70POS_CURSE 0,6,25STRING HELP_MAS5POS_CURSE 0,8,11STRING HELP_MAS6POS_CURSE 0,10,11STRING HELP_MAS7POP DXPOS_CURSE 0,DH,DLMOV AH,0INT 16HCMP AH,36H ;F10 active helpJNZ CLSCALL HELPCLS:WIN 0,1EH,9,10,13,70 ;清屏CALL BACKDISPLAYHELP ENDPFUC_KEY ENDPMENU_SHOW PROC NEAR ;显示菜单CALL SAVEDISPLAYPUSH CXCMP AH,3BH ;F1功能JZ MENU_SHJMP CHAR_GETMENU_SH: ;定义菜单的背景字体颜色 POS_GETPUSH DXWIN 0,06H,2,1,7,11WIN 0,65H,1,0,6,10POS_CURSE 0,1,0STRING MANU_1STRING MANU_2STRING MANU_3STRING MANU_5POP DXDEC DLPOS_CURSE 0,DH,DLCOPMAR:RED_CHRCMP AH,50HJZ MANU_NJMP MANU_HIDMANU_HID: ;菜单隐藏WIN 0,1EH,1,1,7,11CALL BACKDISPLAYJMP CHAR_GETMANU_N: ;开始定义各个菜单项WIN 0,65H,5,1,5,8POS_CURSE 0,5,0STRING MANU_5WIN 0,15H,1,1,1,8POS_CURSE 0,1,0STRING MANU_1RED_CHRCMP AH,48HJE MANU_NCMP AL,0DHJZ NEW_1CMP AH,50HJE MANU_OJMP MANU_HID MANU_N0:JMP MANU_NMANU_O:WIN 0,65H,1,1,1,8 POS_CURSE 0,1,0 STRING MANU_1 WIN 0,15H,2,1,2,8 POS_CURSE 0,2,0 STRING MANU_2 RED_CHRCMP AH,48HJE MANU_OCMP AL,0DHJZ OPEN_1CMP AH,50HJE MANU_SJMP MANU_HID NEW_1: JMP NEW_2 MANU_S:WIN 0,65H,2,1,2,8 POS_CURSE 0,2,0 STRING MANU_2 WIN 0,15H,3,1,3,8 POS_CURSE 0,3,0 STRING MANU_3 RED_CHRCMP AL,0DHJZ SAVE_1CMP AH,48HJE MANU_SCMP AH,50HJE MANU_AJMP MANU_HID OPEN_1: JMP OPEN_2MANU_N1:JMP MANU_NMANU_A:WIN 0,65H,3,1,3,8POS_CURSE 0,3,0STRING MANU_3RED_CHRCMP AH,48HJE MANU_ACMP AH,50HJE MANU_EJMP MANU_HIDMANU_N2:JMP MANU_N1NEW_2: JMP NEWSAVE_1: CALL SAVEMANU_E:WIN 0,15H,5,1,5,8POS_CURSE 0,5,0STRING MANU_5RED_CHRCMP AH,50HJE MANU_N2CMP AH,1CHJE EXITJMP MANU_HIDEXIT:CALL BACKDISPLAY WIN 0,07H,15,10,17,61 WIN 0,24H,14,9,16,60 MOV DH,15MOV DL,9MOV BH,0MOV AH,2INT 10HLEA DX,MESSAGE4 MOV AH,9MOV AH,1INT 21HCMP AL,79HJNZ QCALL QUITTQ: CMP AL,6EHJZ QUITQUIT: WIN 0,07H,0,0,24,79POS_CURSE 0,0,0MOV AH,4CHINT 21HRETMENU_SHOW ENDPNEW PROC NEAR ;新建文件 POS_GETPUSH DXCALL BACKDISPLAYWIN 0,07H,15,10,17,61WIN 0,24H,14,9,16,60,MOV DH,15MOV DL,9MOV BH,0MOV AH,02HINT 10HLEA DX,MESSAGE1CMP AL,0DHMOV AH,9INT 21HMOV BX,0ALL:MOV AH,01HINT 21HCMP AL,0DHJE ALLLMOV PATH[BX],ALJMP ALLALLL:WIN 0,3EH,15,9,17,61POP DXPOS_CURSE 0,DH,DLLEA DX,PATHMOV AH,3CHMOV CX,0INT 21HMOV HANDLE,AXMOV BX,AXMOV AH,3EHINT 21HWIN 0,3EH,1,0,23,79MOV DH,1MOV DL,0MOV BH,0MOV AH,2INT 10HJMP CHAR_GETNEW ENDPOPEN_2: JMP OPENOPEN PROC NEAR ;打开文件 CALL BACKDISPLAYWIN 0,07H,15,10,17,61WIN 0,24H,14,9,16,60MOV DH,15MOV DL,9MOV BH,0MOV AH,2INT 10HLEA DX,MESSAGE3MOV AH,9INT 21HMOV BX,0CLL:MOV AH,1INT 21HCMP AL,13JE CLLLMOV PATH[BX],AL INC BXJMP CLLCLLL:WIN 0,3EH,1,0,23,79 LEA DX,PATHMOV AH,3DHMOV AL,0INT 21HMOV HANDLE,AXLEA DX,BUFFERMOV BX,HANDLEMOV CX,2000MOV AH,3FHINT 21HWIN 0,3EH,1,23,1,79 MOV DH,1MOV DL,0MOV BH,0MOV AH,2INT 10HMOV CX,1000SUB BX,BXREPLAY:MOV DL,BUFFER[BX] INC BXMOV AH,2INT 21HLOOP REPLAYMOV BX,HANDLEMOV AH,3EHINT 21HMOV DH,1MOV DL,0MOV BH,0MOV AH,2INT 10HMOV CX,10MOV BX,0CLEAPATH_3:MOV BL,0MOV PATH[BX],BLLOOP CLEAPATH_3JMP CHAR_GETOPEN ENDPSAVE PROC NEAR ;保存文件 POS_GETPUSH DXWIN 0,3EH,1,0,6,10CALL BACKDISPLAYMOV AH,PATHCMP AH,21HJL J_3JMP J_4J_3:WIN 0,07H,15,10,17,61WIN 0,24H,14,9,16,60,MOV DH,15MOV DL,9MOV BH,0MOV AH,2INT 10HLEA DX,MESSAGE2MOV AH,9INT 21HMOV BX,0DLL:MOV AH,1INT 21HCMP AL,0DHJE DLLLMOV PATH[BX],ALINC BXJMP DLLDLLL:WIN 0,3EH,1,0,23,79POP DXPOS_CURSE 0,DH,DL J_4: LEA DX,PATHMOV AH,3CHMOV CX,0INT 21HMOV HANDLE,AXLEA DX,BUFFERMOV BX,HANDLEMOV CX,2000MOV AH,40HINT 21HMOV BX,HANDLEMOV AH,3EHINT 21HCALL BACKDISPLAY JMP CHAR_GETSAVE ENDP SAVEDISPLAY PROC NEAR PUSH AXPUSH BXPUSH CXPUSH DXPUSH DSMOV AX,0002HINT 33HMOV BX,0DMOV CX,3840DLOOP1:MOV AX,0B800HMOV DS,AXMOV DL,DS:[BX]MOV AX,DATAMOV DS,AXMOV BAK[BX],DLINC BXLOOP LOOP1MOV AX,0001HINT 33HPOP DSPOP DXPOP CXPOP BXPOP AXSAVEDISPLAY ENDPBACKDISPLAY PROC NEAR PUSH AXPUSH BXPUSH CXPUSH DXPUSH DSMOV BX,0DMOV CX,3840DLOOP11:MOV AX,DATAMOV DS,AXMOV DL,BAK[BX]MOV AX,0B800HMOV DS,AXMOV DS:[BX],DLINC BXLOOP LOOP11POP DSPOP DXPOP CXPOP BXPOP AXRETBACKDISPLAY ENDPQUITT PROC NEAR ;退出 CALL BACKDISPLAYWIN 0,07H,15,10,17,61WIN 0,24H,14,9,16,60,MOV DH,15MOV DL,9MOV BH,0MOV AH,2INT 10HLEA DX,MESSAGE2MOV AH,9INT 21HMOV BX,0QLL:MOV AH,1INT 21HCMP AL,0DHJE QLLLMOV PATH[BX],ALINC BXJMP QLLQLLL:WIN 0,07H,15,10,17,61WIN 0,3EH,14,9,16,60CALL BACKDISPLAYLEA DX,PATHMOV AH,3CHMOV CX,00INT 21HMOV HANDLE,AXLEA DX,BUFFERMOV BX,HANDLEMOV CX,2000MOV AH,40HINT 21HMOV BX,HANDLEMOV AH,3EHINT 21HCALL BACKDISPLAYWIN 0,07H,0,0,24,79MOV AH,4CHINT 21HRETQUITT ENDPEDIT ENDPCODE ENDSEND START ;结束4.2执行结果4.2.1测试方法在弹出的界面中第一行输入ABCDEFGHIJKLMN,在第二行输入abcdefghijklmn。
文本编辑器实现原理
文本编辑器的实现原理可以简单概括为以下几步:
1.用户输入文本:用户在编辑器中输入文本,此时文本呈现在编辑器
的屏幕上。
2.文本存储:编译器将用户输入的文本存储在内存或外部存储设备中,以便用户在下次使用编辑器时可以继续编辑。
3.文本修改:当用户对文本进行修改时,编辑器会检测用户的操作
(比如插入、删除、修改等)并相应地更新文本的内容。
4.光标控制:编辑器需要追踪光标的位置并控制其移动,以便用户可
以编辑文本的任何部分。
5.用户界面:用户界面需要显示编辑器的各种工具和选项,比如字体、颜色、格式等。
6.保存和打开:编辑器需要提供保存和打开文本的功能,以便用户可
以在其他时间或设备上打开和编辑他们的文本。
总的来说,文本编辑器实现的原理就是通过对用户输入的文本进行存储、修改和展示等一系列操作,为用户提供方便快捷的文本编辑功能。
C语言实现文本编辑器本文将介绍使用C语言实现一个简单的文本编辑器的基本原理和实现步骤。
通过此编辑器,用户可以打开、编辑、保存和关闭文本文件,并且具备基本的文本编辑功能,如插入、删除、查找和替换文本等。
一、编辑器界面设计为了实现一个简单易用的文本编辑器,我们可以设计一个基于命令行界面的编辑器。
用户可以通过文本命令来操作编辑器,从而实现基本的编辑功能。
二、文件的打开和保存在C语言中,我们可以使用标准文件操作函数来实现文件的打开和保存。
用户可以通过指定文件路径来打开或保存文件。
打开文件时,程序会读取文件内容,并将其显示在编辑器界面中;保存文件时,程序会将编辑器内的文本内容写入目标文件中。
三、基本文本编辑功能1. 插入文本用户可以使用插入命令将文本内容插入到当前光标位置之前或之后。
程序会根据插入位置的不同,调整光标的位置,并显示插入后的文本内容。
2. 删除文本用户可以使用删除命令删除当前光标位置处的文本内容。
程序会删除光标所在位置的字符,并相应地调整文本的显示和光标的位置。
3. 搜索文本用户可以使用搜索命令来查找特定的文本内容。
程序会从当前光标位置开始搜索,并根据搜索结果将光标移动到匹配文本的位置。
4. 替换文本用户可以使用替换命令将指定的文本内容替换为新的内容。
程序会搜索文本中的所有匹配项,并将其替换为新的内容。
四、其他功能扩展除了基本的文本编辑功能外,我们还可以对编辑器进行功能扩展,以提升用户体验和编辑效率。
一些可能的扩展功能包括:1. 撤销和重做功能:允许用户撤销和重做操作,以便回退或恢复文本编辑的历史记录。
2. 多窗口编辑:支持同时打开和编辑多个文本文件的功能,提供多窗口切换和管理。
3. 自动保存与恢复:定时自动保存编辑的文本内容,并在下次启动时自动恢复上次编辑的状态。
4. 语法高亮:根据文本类型,对关键字、注释、字符串等进行特殊标记显示,提升代码可读性。
五、总结通过使用C语言,我们可以实现一个简单但功能完善的文本编辑器。
写一个简单的汇编语言并运行汇编语言是一种底层编程语言,用于编写计算机指令。
它直接操作计算机的硬件,可以实现高度精确的控制和优化。
在本文中,我们将介绍一个简单的汇编语言,并演示如何编写和运行它。
首先,让我们定义一个简单的任务,即计算两个数的和。
我们将使用x86架构的汇编语言来完成此任务。
要编写汇编语言程序,我们需要一个文本编辑器,比如记事本或文本编辑器。
在编辑器中创建一个新文件,并将其保存为"sum.asm"。
接下来,我们需要定义我们的汇编程序的入口点。
这可以通过"main"标签来实现,如下所示:```assemblysection .textglobal _start_start:; 程序代码将从这里开始; 在这里编写您的代码```现在,我们可以编写计算两个数的和的代码。
假设我们要计算的两个数为5和7,并将结果保存在另一个变量中。
```assemblysection .datanum1 db 5 ; 第一个数num2 db 7 ; 第二个数result db 0 ; 结果变量section .textglobal _start_start:mov al, [num1] ; 将num1的值移动到寄存器AL中add al, [num2] ; 将num2的值加到AL中mov [result], al ; 将结果存储到result变量中; 在此添加其他需要执行的指令; 程序结束,退出mov eax, 1 ; 退出系统调用号xor ebx, ebx ; 返回值为0int 0x80 ; 调用系统中断在上面的代码中,我们使用了`mov`指令来将变量的值移动到寄存器中,使用`add`指令来执行加法操作,并使用`mov`指令将结果存储回变量中。
编写完成后,我们可以保存并关闭文件。
接下来,我们需要使用汇编器将该汇编程序编译成机器代码。
打开命令提示符窗口,并导航到保存了"sum.asm"文件的位置。
如何用C#编写文本编辑器如何用C#编写文本编辑器摘要本文探讨了使用C#从底层开发一个带格式的文本编辑器的任务,深入探讨了其中的文档对象模型的设计,图形化用户界面的处理和用户操作的响应,说明了其中的某些技术问题和解决之道。
前言小弟从大学里开始接触编程也有6年了,工作4年也是干编程的活,见过不少程序,自己也编过不少,在学校编程自己觉得是搞艺术品,其实玩一些游戏,比如文明法老王星际等从某些角度看也是搞艺术品,看着自己苦心经营的建筑物和人员由少变多,由简单变复杂,心中有些成就感。
编程也一样,程序从几十行写到上万行,功能由HellowWord到相当复杂而强大,心中也有不少成就感。
毕业后工作,才渐渐感悟软件开发本质上是做一个工具,这个工具给别人或者自己用。
有了工具,很多问题就迎刃可解了。
如此开来偶们程序员和石匠铁匠木匠是同一类人了。
不过没什么,程序员本来就没高人一等,人在社会,认认真真的工作就行了。
问题废话不多说了,现在谈谈标题提出的问题,如何用C#编写文本编辑器。
本人有幸开发过一个比较复杂的文本编辑器,因此也算有点经验吧,在此来分享一下。
这里所指的文本编辑器不是简单的像Windows自带的单行或多行文本编辑框,而是类似于Word的文本编辑器。
粗看起来,一个编辑器有什么好难的,其实很难的,因为我们认为容易的事对计算机来说确实天大的问题。
比如大家经常上网,可以发现最近几年很多网站登录时除了输入用户名和密码后还要输入所谓的验证码,而验证码则在输入框旁边歪歪扭扭的画了出来,就像小学一年纪的学生在一张脏纸上写的一样,这样做只是为了防止程序来模拟登录,因为歪歪扭扭的文字人类可以很容易的辨认,而计算机则很不容易辨认。
例子:注册hotmail使用的验证码,其显示的字符为8UV9BKYR 。
一个文本编辑器主要处理的问题有•文件保存格式的定义,文档保存为文本格式还是二进制格式的,文档中各个信息单元保存什么信息。
文档格式很重要。
计算机与通信学院软件学院课程设计说明书简易文本编辑器作者:刘正翔学号:11700215专业:软件技术班级:软件2班指导教师:张聚礼答辩时间: 2012/7/2简易文本编辑器刘正翔11700215微型计算机原理及应用课程设计任务书题目:简易文本编辑器学生姓名:刘正翔学号:11700215 班级:软件2 班题目类型:软件工程(R)指导教师:张聚礼一.微型计算机原理及应用课程设计内容汇编语言是微型计算机原理及应用的基础,微机主机和接口所要实现的功能都要通过汇编语言来实现。
尽管汇编语言程序设计编程效率低,但其运行效率高、速度快。
因此掌握汇编语言是学好微机原理和接口设计的第一步。
设计一个功能较完备的文本编辑器,文本编辑器大小为24行80列,界面提供编辑菜单、文件操作菜单及简单帮助。
二.微型计算机原理及应用课程设计目的1、学习磁盘文件的建立、打开、关闭和读写等操作功能调用;2、实现对磁盘文件的存取;3、熟练掌握BIOS、DOS的系统功能调用;三.微型计算机原理及应用课程设计的要求1、利用DOS系统功能调用和BIOS功能调用设计一个有菜单栏的编辑窗口。
在该窗口中可以实现文本的输入;可以利用“Del”键、“BackSpace”键、“Home”键、“End”键、“↑”、“↓”、“←”、“→”方向移动键实现对输入文本的全屏编辑。
使用彩色组和背景颜色来设计界面颜色,利用DOS系统功能调用的磁盘文件存取技术实现文件的“信件”、“打开”、“保存”、“另存为”与“退出”功能。
2、查阅文献资料,一般在5篇以上;3、完成算法设计和程序设计、调试;4、撰写课程设计说明书;5、做好答辩工作。
四.微型计算机原理及应用课程设计思路DOS提供了一组完成磁盘文件的建立、打开、关闭和读写等操作的功能调用。
利用DOS 和BIOS功能调用,汇编语言可实现对磁盘文件的存取。
利用BIOS功能调用中的10H 中断类型,可以设置显示模式,设置窗口背景、字符颜色等。