汇编语言实现文本编辑器
汇编--文本编辑器

操作运行界面,在出现的界面中输入任意文本内容,利用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.保存和打开:编辑器需要提供保存和打开文本的功能,以便用户可
以在其他时间或设备上打开和编辑他们的文本。
总的来说,文本编辑器实现的原理就是通过对用户输入的文本进行存储、修改和展示等一系列操作,为用户提供方便快捷的文本编辑功能。
编程语言基础入门教程文本编辑器

代码高亮
根据语法规则对代码进行高亮 显示,提高可读性。
文本编辑
支持插入、删除、修改文本内 容。
文件操作
支持新建、打开、保存等文件 操作,方便用户管理文件。
自动缩进
自动缩进代码,使代码更易读 和管理。
文本编辑器的使用方法
打开文件
通过菜单栏或工具 栏中的打开命令, 选择要打开的文件 。
编辑文本
在编辑区域中,直 接插入、删除、修 改文本内容。
3. 数据分析和可视化
使用Pandas提供的方法对数据进行统计分析,并使用 Matplotlib库进行可视化展示。
实战案例三
使用Java实现一个简单的聊天室
总结词
通过Java的Socket编程,实现基于TCP协议的聊天室应用。
实践案例与经验分享 实战案例一:开发一个简单的网页 爬虫
详细描述
1. 环境搭建:安装JDK和Eclipse开发工具, 配置Java开发环境。
02
文本编辑器的基本功能与 使用方法
文本编辑器的界面布局
菜单栏
包含文件、编辑、视图等常用命令,方便 用户进行操作。
编辑区域
用于显示和编辑文本内容。
工具栏
提供常用工具按钮,如保存、剪切、复制 等。
状态栏
显示当前文本的状态信息,如文件名、当 前行数等。
文本编辑器的常用功能
查找与替换
方便用户快速定位和修改文本 中的特定内容。
设置断点
在需要调试的代码行前点击设置断点,或使用快捷键打断点。
运行调试
执行调试命令或点击相应的按钮开始调试,观察代码的执行过程和变量的值。
如何在文本编辑器中管理项目和文件
创建项目文件夹
在文本编辑器中创建项目文件夹,并把相关的文 件放入文件夹中。
C语言实现文本编辑器

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#编写文本编辑器摘要本文探讨了使用C#从底层开发一个带格式的文本编辑器的任务,深入探讨了其中的文档对象模型的设计,图形化用户界面的处理和用户操作的响应,说明了其中的某些技术问题和解决之道。
前言小弟从大学里开始接触编程也有6年了,工作4年也是干编程的活,见过不少程序,自己也编过不少,在学校编程自己觉得是搞艺术品,其实玩一些游戏,比如文明法老王星际等从某些角度看也是搞艺术品,看着自己苦心经营的建筑物和人员由少变多,由简单变复杂,心中有些成就感。
编程也一样,程序从几十行写到上万行,功能由HellowWord到相当复杂而强大,心中也有不少成就感。
毕业后工作,才渐渐感悟软件开发本质上是做一个工具,这个工具给别人或者自己用。
有了工具,很多问题就迎刃可解了。
如此开来偶们程序员和石匠铁匠木匠是同一类人了。
不过没什么,程序员本来就没高人一等,人在社会,认认真真的工作就行了。
问题废话不多说了,现在谈谈标题提出的问题,如何用C#编写文本编辑器。
本人有幸开发过一个比较复杂的文本编辑器,因此也算有点经验吧,在此来分享一下。
这里所指的文本编辑器不是简单的像Windows自带的单行或多行文本编辑框,而是类似于Word的文本编辑器。
粗看起来,一个编辑器有什么好难的,其实很难的,因为我们认为容易的事对计算机来说确实天大的问题。
比如大家经常上网,可以发现最近几年很多网站登录时除了输入用户名和密码后还要输入所谓的验证码,而验证码则在输入框旁边歪歪扭扭的画了出来,就像小学一年纪的学生在一张脏纸上写的一样,这样做只是为了防止程序来模拟登录,因为歪歪扭扭的文字人类可以很容易的辨认,而计算机则很不容易辨认。
例子:注册hotmail使用的验证码,其显示的字符为8UV9BKYR 。
一个文本编辑器主要处理的问题有•文件保存格式的定义,文档保存为文本格式还是二进制格式的,文档中各个信息单元保存什么信息。
文档格式很重要。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
bak
db 3850 dup(0) ;保存缓冲区的内容
2、本程序主要使用的子程序说明
Wind ;创建窗口的子程序
edit ;进行文本文本编辑
win4 ;动态显示光标位置,先保存光标位置,最后一行输出 行列数 改变了光标位置
Open
;输出文本内容
Save
;保存文本内容
clean_path ;清除保存路径的内容
read_chr macro
;读取字符宏定义
mov ah,0
int 16h
endm
win4
武汉理工大学计算机科学与技术学院《汇编语言》课程设计报告书
huixian macro mov ah,1 int 21h endm xianshi macro mov ah,2 int 21h endm readf macro mov ah,3fh int 21h endm openf macro mov ah,3dh
N down
N
Y
光标下移 Row + 1
left N
right
N Home
Y
光标左移
line - 1
Y
光标右移
line + 1
Y
光标移到本行首位
line =0
N End
Y光标移到本行首位
line =79
Enter N
Backspace N
Delete N
F1 new N
F2 open N
F3 save
三、 详细的算法描述
武汉理工大学计算机科学与技术学院《汇编语言》课程设计报告书
1、本程序主要使用的数据结构如下:
path db 40 dup(0),'$' ;保存文件路径
buffer db 1840 dup(0) ,'$'
;保存文本内容,作为一个缓存区
line db ?
;保ቤተ መጻሕፍቲ ባይዱ列号
row
db ? ;保存行号
课程设计任务书
学生姓名: 黄威 专业班级:计算机科学与技术 0705
指导教师: 李春林
工作单位:计算机科学与技术学院
题目: 文本方式下字处理程序的设计与实现
初始条件:
理论:完成了《汇编语言程序设计》课程,对微机系统结构和 80 系列指令系统有了 较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。
实践:完成了《汇编语言程序设计》的 4 个实验,熟悉了汇编语言程序的设计环境并 掌握了汇编语言程序的调试方法。
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等
具体要求) 理解键盘和显示器接口的工作原理,掌握 BIOS 键盘和显示器中断调用的使用方
法,掌握复杂内存数据结构的定义和管理方法。具体的设计任务及要求: 1)清晰且易于操作的用户界面;动态显示光标的当前位置; 2)在文本编辑区接受并保存输入信息; 3)光标上移,下移,左移,右移; 4)允许删除当前光标前的字符; 5)将编辑文本存盘,读出并显示硬盘中的指定文件。(任选)
3、函数调用关系:
主函数 main
Wind
Win3 和 wind4
各个键的 功能模块
curs_get
edit
menu_show
func_key
new open save save_as exit
home end backspace delete F10 help
4、程序中主要使用的宏汇编以及出口、入口的参数说明
本科生课程设计成绩评定表
班级:计算机 0705 班
序 号
姓名:黄威 学号:0120710340522
评分项日
満分
实得分
1 学习态度认真,遵守纪律。
20
2 设计结果。
40
3 设计报告规范(包括设计图、设计代码)
另存文件
N F5 exit
N
Y Path = 输入的文件路径
保存文件
结束
四、 软件的测试方法和测试结果
经过测试实现用键盘上的功能键制文本编辑程序, 1、测试用例:
1. 按一下 BackSpace 键可以删除当前光标以前的字符; 2. 按一下 Delete 键可以删除当前光标之后的字符; 3. 按一下 Home 键可以使光标跳转到当前行的第一列; 4. 按一下 End 键可以使光标跳转到当前行的最后一列; 5. 按一下 Enter 键可以使光标跳转到下一行的第一列; 6. 用 上下左右 键 使光标在文本框内任意移动
mov al,80d ;r * 80
mul bl
add al,ccol
;+ c
adc ah,0
pop bx
endm
edit 的程序流程图:
开始
键盘输入字符
判断键值 是功能键
Y up
N
录入字符保存,
保存字符
Y
光标上移
row - 1
刷屏,重新显示 文本界面
武汉理工大学计算机科学与技术学院《汇编语言》课程设计报告书
子程序设计:把程序模块化,完成独立的功能 宏汇编设计:更像高级语言中的函数设计 INT 21H :强大的 DOS 功能调用(包括文件操作) INT 10H :显示操作,进行显示控制 INT 16H :键盘中断,控制键盘,完成对应的操作 本程序最大特点功能比较完善,由于使用较多的宏汇编是的代码量大大降 低,宏汇编从分体现代码的重用。 实现:BackSpace 删除当前光标以前的字符;
武汉理工大学计算机科学与技术学院《汇编语言》课程设计报告书
学 号: 0120710340522
武汉理工大学
汇编语言课程设计
题 目 文本方式下字处理程序的设计与实现
学院
计算机科学与技术学院
专业
计算机科学与技术
班级
计算机科学与技术 0705
姓名
黄威
指导教师
李春林
2010 年 1 月 15 日
武汉理工大学计算机科学与技术学院《汇编语言》课程设计报告书
(2)通过设计、编制、调试一个文本方式下字处理程序。实现一个简单的文本编辑器 的基本功能
2、 设计内容
1)清晰且易于操作的用户界面; 2)动态显示光标的当前位置; 3)在文本编辑区可以输入字符信息; 4)光标上移,下移,左移,右移,还可以回车,使用 home 键、end 键退格键; 5)允许删除当前光标前的字符; 6)将编辑文本存盘,读出并显示硬盘中的指定文件。
2、文件操作 1.按一下 new 键可以创建新文件 2.按一下 open 键可以打开已有的文件; 3.按一下 save 键可以保存当前文件 4.按一下 saveas 键可以另存为当前文件 5.按一下 exit 键可以正常退出文本编辑器 Path = 完整的文件名(默认路径) 或 Path = 完整的路径+文件名
;输入字符光标
win macro opr1,opr2,opr3,opr4,opr5,opr6 mov ah,07h mov al,opr1 mov bh,opr2 mov ch,opr3 mov cl,opr4 mov dh,opr5 mov dl,opr6
;建立窗口 ;初始化 ;上或下卷的行数 ;卷入行属性 ;左上角行号 ;左下角列号 ;右上角行号 ;右下角列号
Delete 键删除当前光标之后的字符; Home 键使光标跳转到当前行的第一列; End 键使光标跳转到当前行的最后一列; Enter 键使光标跳转到下一行的第一列; 用 上下左右 键 使光标在文本框内任意移动 可以保存文件,以及打开指定路径文件,基本是一个简单的文本编辑器 文本的内容是由 buffer 定义的缓冲区保存,所以就把光标的位置换算为数组的下标, (坐标定位公式 r*80+c)进行定位操作。是每个元素都对应文本框内的一个位置起到保存 文本内容的作用。但是,文本的大小也就固定了;同时:当插入时就会覆盖原有的字符。 这样就很难实现插入操作。为此我想:只要略微改变一下当前的数据结构就可以实现插入 和扩充文本,或者专门为插入计算一个插入的函数也可实现。
mov al,0 int 21h endm jianlif macro mov ah,3ch mov cx,00 int 21h endm writef macro mov ah,40h int 21h endm closef macro mov ah,3eh int 21h endm string macro p1 mov ah,9 lea dx,p1 int 21h endm
int 10h endm
;读光标位置 ;页号 ch/cl:开始/结束行;dh/dl 当前行
buffer_locate macro rrow,ccol
;坐标定位 r*80+c 坐标在 ax 中;即行列数对应的缓冲区偏移地址 ax 中
push bx
mov ah,0d
dec rrow
mov bl,rrow
在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求 请见课程设计指导书。
阅读资料: 1)《IBM—PC 汇编语言程序设计实验教程》3.3 节 2)《IBM—PC 汇编语言程序设计(第 2 版)》9.1 节
时间安排:
设计安排一周:周 1、周 2:完成系统分析及设计。 周 3、周 4:完成程序调试,和验收。 周 5:撰写课程设计报告。
光标移到下行首位
Y
row +1; line =0
Y
删除光标前的字符
row+1
Y
删除光标后的字符 row+1
Y
创建新文件
row+1
Y
Path = 输入的文件路径
打开文件
Y
Path = 输入的文件路径 保存文件
武汉理工大学计算机科学与技术学院《汇编语言》课程设计报告书