⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t2.asm

📁 汇编语言程式设计,一个简单的文本文件编辑器,里面有完整的程序设计报告,基本实现文本文件的基本功能
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;#Mode=Dos
widows macro p1,p2,p3,p4,p5,p6    ;建立窗口
         mov ah,06h                           ;功能号
         mov al,p1                              ;页号
         mov bh,p2                             ;属性
         mov ch,p3                              ;左上角行
         mov cl,p4                               ;左上角列
         mov dh,p5                             ;右上角行
         mov dl,p6                              ;右上角列
         int 10h                                 ;调用BIOS子函数
endm

layp macro op1,op2,op3               ;定义光标位置
         mov ah,2
         mov bh,op1                         ;页号
         mov dh,op2                        ;行
         mov dl,op3                          ;列
         int 10h                               ;调用BIOS子函数
endm

getp  macro                             ;显示光标位置
         mov ah,03h
         mov bh,0
         int 10h                           
endm

readp macro                              ;读取字符宏定义
        mov ah,0
        int 16h                               ;调用BIOS子函数
endm

string  macro p1                          ;输入字符光标
        mov ah,9                             ;功能号
        lea dx,p1                              ;字符串的首地址
        int 21h                                ;调用DOS子函数
endm

data     segment                           ;定义数据段
         menu     db 'File(F1)  Edit  Help(f10) $'
         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)***: ','$'
        help1 db '==========================================================$'   ;帮助内容
        help2 db 'Press F1 to active file. $'
        help3 db 'You can use DOWN cursor key to choose the fuction $'
        help4 db 'Press F10 to show the help massage.Press Esc To Quit$'
         path     db 50 dup(0),'$'
         buffer   db 2000 dup(?)
         bak      db 3850 dup(0)
         line      db ?
         row      db ?
         char     db ?     
data     ends

code     segment                       
main     proc far                           ;主程序
         assume cs:code,ds:data
start:
         push ds
         sub  ax,ax
         push ax
         mov  ax,data
         mov  ds,ax
         call build                        ;调用子函数创建窗口              
         call edit                                 ;调用编辑子函数                             
         ret
main     endp

build proc near                               ;创建窗口子程序
         widows 0,70h,1,0,50,99                 ;定义窗口背景
         widows 1,07h,0,0,0,99
show:			                     ;显示菜单位置及内容
         layp 0,0,1			 
         mov ah,9
         lea dx,menu                                    ;菜单字串首地址
         int 21h
         layp  0,1,0
         mov row,dh
         mov line,dl
build endp

edit proc near
getc:                             ;读字符
      call com
com proc near                         ;定义功能鍵
        getp                                ;得到当前位置
        mov  row,dh
        mov  line,dl
first:
        layp 0,row,line
j00:    mov ah,0
        int 16h                        ;从键盘读字符 ah=扫描码 al=字符码
        push ax
        lea dx,buffer
        mov buffer[bx],al
        inc bx
        cmp  ah,48h                    ;是否向上
        jz   up_1
        cmp  ah,50h                    ;是否向下
        jz   down_1
        cmp  ah,4bh                    ;是否向左
        jz   left
        cmp  ah,4dh                    ;是否向右
        jz   right
        cmp  ah,1ch                    ;是否回车
        jz   enter_1
        call fuc_key                    ;调用子功能函数
        mov ah,2
        mov dl,al
        int 21h
        pop ax
        call  menu_show
        jmp   j6
down_1:
        jmp down
enter_1:
        jmp enter_2
up_1:   jmp up
left:                                   ;光标左移
        getp
        mov row,dh
        mov dl,line
        cmp line,0
        jnz direct
        mov line,99
        dec row
        cmp row,0
        je  stop2                                            
        jmp first
stop2: 
        mov row,1
        jmp first
direct:   
        dec line
                          ;显示光标位置
        jmp first
right:                                 ;光标右移
        getp
        mov row,dh
        mov dl,line
        cmp line,99
        jnz direct2
        mov line,0
        inc row
        cmp row,50
        je  returns1       
        jmp first
direct2:
        inc  line
      
        jmp first
enter_2:
        jmp enter
up:                                     ;上移光标
        getp
        mov row,dh
        mov dl,line
        dec row
        cmp row,0
        je  stop1
    
        jmp first
stop1:  
        mov row,1
        jmp first
down:                                    ;下移光标
        getp
        mov row,dh
        mov dl,line   
        inc row
        cmp row,50
        je  stop3
     
        jmp first
stop3:  
        mov row,23
        jmp first
returns1:
        jmp returns
enter:                                   ;回车换行
        getp
        mov row,dh
        mov line,dl
        inc row
        cmp row,50
        je  returns
        mov line,0
  
        jmp first
returns:
        mov row,50
 	mov line,0
	jmp first
j6:     
        ret
com     endp
fuc_key proc near                 ;功能键子程序  
 next:  

        cmp ah,0eh                ;backspace
        jz  bak_sp
        cmp ah,53h
        jz  del
        cmp ah,44h                ;F10
        jz  help_0
        ret
help_0: call help

bak_sp:                           ;退格键的功能
        getp
        mov row,dh
        mov line,dl
        cmp line,0
        je  stop
        dec line
        jmp ab
stop:	
        mov line,0 
ab:     
        getp 0,row,line
        mov ah,2
        mov dl,00
        int 21h
 
        jmp first
del:                                ;DEL删除
        getp
        mov row,dh
        mov line,dl
        dec line
        getp 0,row,line
        mov ah,2
        mov dl,00
        int 21h
        inc line

        jmp first
cm:     
        cmp line,00
        jz  pos_cm
pos_cm:
        layp 0,0,0
        jmp first
help proc near                       ;显示帮助信息
      call savedisplay               ;显示帮助信息每行的位置
      getp
      push dx
      widows 0,3eh,4,5,21,70
      layp 0,6,11
      string help1
      layp 0,8,11
      string help2
      layp 0,10,11
      string help3
      layp 0,12,11
      string help4
      layp 0,14,11
      string help1
      pop dx
      layp 0,dh,dl
      mov  ah,0
      int  16h
      cmp  ah,36h                       ;F10 active help
      jnz  cls
      call help
cls:    
      widows 0,1eh,9,10,13,70              ;清屏
      call backdisplay
help endp 
fuc_key endp
menu_show proc near                     ;显示菜单
        call savedisplay
        push cx
        cmp ah,3bh                      ;F1功能
      jz  menu_sh
        jmp getc
menu_sh:                                ;定义菜单的背景字体颜色
        getp
        push dx
        widows 0,07h,2,1,7,11
        widows 0,65h,1,0,6,10
        layp 0,1,0
        string manu_1
        string manu_2
        string manu_3
        string manu_4
        string manu_5
        pop dx
        dec dl
        layp 0,dh,dl
copmar:    
        readp 
        cmp ah,50h                 
        jz  manu_n
        jmp manu_hid
manu_hid:                               ;菜单隐藏
        widows 0,1eh,1,1,7,11
        call backdisplay
        jmp getc
manu_n:					;开始定义各个菜单项
        widows 0,65h,5,1,5,8
        layp 0,5,0
        string manu_5
        widows 0,15h,1,1,1,8
        layp 0,1,0
        string manu_1
        readp
        cmp ah,48h
        je  manu_n
        cmp al,0dh
        jz  new_1
        cmp ah,50h
        je  manu_o
        jmp manu_hid
manu_n0:
        jmp manu_n
manu_o:
        widows 0,65h,1,1,1,8
        layp 0,1,0
        string manu_1
        widows 0,15h,2,1,2,8
        layp 0,2,0
        string manu_2
        readp
        cmp ah,48h
        je  manu_o
        cmp al,0dh
        jz open_1
        cmp ah,50h
        je  manu_s
        jmp manu_hid
new_1:  jmp new_2
manu_s:
        widows 0,65h,2,1,2,8
        layp 0,2,0
        string manu_2
        widows 0,15h,3,1,3,8
        layp 0,3,0
        string manu_3
        readp
        cmp al,0dh
        jz  save_1
        cmp ah,48h
        je  manu_s
        cmp ah,50h
        je  manu_a
        jmp manu_hid
open_1: jmp open_2
manu_n1:
        jmp manu_n
manu_a:
        widows 0,65h,3,1,3,8

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -