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

📄 textedit.asm

📁 多种汇编语言程序设计案例
💻 ASM
📖 第 1 页 / 共 2 页
字号:
red_chr macro                              ;读取字符宏定义
        mov ah,0
        int 16h
endm
string  macro p1                          ;输入字符光标
        mov ah,9
        lea dx,p1
        int 21h
endm
win macro opr1,opr2,opr3,opr4,opr5,opr6    ;建立窗口
         mov ah,06h
         mov al,opr1
         mov bh,opr2
         mov ch,opr3
         mov cl,opr4
         mov dh,opr5
         mov dl,opr6
         int 10h
endm
pos_curse macro op1,op2,op3               ;定义光标位置
         mov ah,2
         mov bh,op1
         mov dh,op2
         mov dl,op3
         int 10h
endm
pos_get  macro                             ;显示光标位置
         mov ah,03h
         mov bh,0
         int 10h
endm
data     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     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 wind                 
         call edit                                
         ret
main     endp
wind proc near                               ;创建窗口子程序
         win 0,3eh,1,0,24,79                 ;定义窗口背景
         win 1,1fh,0,0,0,79
         win 0,1fh,24,0,24,79
show:			                     ;显示菜单位置及内容
         pos_curse 0,0,1			 
         mov ah,9
         lea dx,menu
         int 21h
show_2:					     ;显示状态栏位置及内容
         pos_curse 0,24,1
         mov ah,9
         lea dx,mass_1
         int 21h
         call win3
         call win4
         pos_curse  0,1,0
         mov row,dh
         mov line,dl
wind endp
edit proc near
char_get:                             ;读字符
      call com
com proc near                         ;定义功能鍵
        pos_get
        mov  row,dh
        mov  line,dl
first:
        pos_curse 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:                                   ;光标左移
        pos_get
        mov row,dh
        mov dl,line
        cmp line,0
        jnz direct
        mov line,79
        dec row
        cmp row,0
        je  stop2                                            
        jmp first
stop2: 
        mov row,1
        jmp first
direct:   
        dec line
        call win4                      ;显示光标位置
        jmp first
right:                                 ;光标右移
        pos_get
        mov row,dh
        mov dl,line
        cmp line,79
        jnz direct2
        mov line,0
        inc row
        cmp row,24
        je  returns1       
        jmp first
direct2:
        inc  line
        call win4
        jmp first
enter_2:
        jmp enter
up:                                     ;上移光标
        pos_get
        mov row,dh
        mov dl,line
        dec row
        cmp row,0
        je  stop1
        call win4
        jmp first
stop1:  
        mov row,1
        jmp first
down:                                    ;下移光标
        pos_get
        mov row,dh
        mov dl,line   
        inc row
        cmp row,24
        je  stop3
        call win4
        jmp first
stop3:  
        mov row,23
        jmp first
returns1:
        jmp returns
enter:                                   ;回车换行
        pos_get
        mov row,dh
        mov line,dl
        inc row
        cmp row,24
        je  returns
        mov line,0
        call win4
        jmp first
returns:
        mov row,24
 	mov line,0
	jmp first
j6:     
        ret
com     endp
fuc_key proc near                 ;功能键子程序  
 next:  
        cmp ah,47h                ;home
        jz  home
        cmp ah,4fh                ;end
        jz  _end
        cmp ah,0eh                ;backspace
        jz  bak_sp
        cmp ah,53h
        jz  del
        cmp ah,44h                ;F10
        jz  help_0
        ret
help_0: call help
home:                             ;HOME键的功能
        pos_get
        mov row,dh
        mov line,0
       call win4
        jmp first    
_end:                             ;END键的功能
        pos_get
        mov row,dh
        mov line,79
       call win4
        jmp first
bak_sp:                           ;退格键的功能
        pos_get
        mov row,dh
        mov line,dl
        cmp line,0
        je  stop
        dec line
        jmp ab
stop:	
        mov line,0 
ab:     
        pos_get 0,row,line
        mov ah,2
        mov dl,00
        int 21h
        call win4
        jmp first
del:                                ;DEL删除
        pos_get
        mov row,dh
        mov line,dl
        dec line
        pos_get 0,row,line
        mov ah,2
        mov dl,00
        int 21h
        inc line
        call win4
        jmp first
cm:     
        cmp line,00
        jz  pos_cm
pos_cm:
        pos_curse 0,0,0
        jmp first
help proc near                       ;显示帮助信息
      call savedisplay               ;显示帮助信息每行的位置
      pos_get
      push dx
      win 0,57h,4,5,21,70
      pos_curse 0,6,25
      string help_mas1
      pos_curse 0,8,11
      string help_mas2
      pos_curse 0,10,11
      string help_mas3
      pos_curse 0,12,11
      string help_mas4
      pos_curse 0,14,11
      string help_mas5
      pos_curse 0,16,11
      string help_mas6
      pos_curse 0,18,11
      string help_mas7
      pop dx
      pos_curse 0,dh,dl
      mov  ah,0
      int  16h
      cmp  ah,36h                       ;F10 active help
      jnz  cls
      call help
cls:    
      win 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 char_get
menu_sh:                                ;定义菜单的背景字体颜色
        pos_get
        push dx
        win 0,06h,2,1,7,11
        win 0,65h,1,0,6,10
        pos_curse 0,1,0
        string manu_1
        string manu_2
        string manu_3
        string manu_4
        string manu_5
        pop dx
        dec dl
        pos_curse 0,dh,dl
copmar:    
        red_chr 
        cmp ah,50h                 
        jz  manu_n
        jmp manu_hid
manu_hid:                               ;菜单隐藏
        win 0,1eh,1,1,7,11
        call backdisplay
        jmp char_get
manu_n:					;开始定义各个菜单项
        win 0,65h,5,1,5,8
        pos_curse 0,5,0
        string manu_5
        win 0,15h,1,1,1,8
        pos_curse 0,1,0
        string manu_1
        red_chr
        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:
        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_chr
        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:
        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_chr
        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:
        win 0,65h,3,1,3,8
        pos_curse 0,3,0
        string manu_3
        win 0,15h,4,1,4,8
        pos_curse 0,4,0
        string manu_4 
        red_chr
        cmp ah,1ch
        jz  save_2
        cmp ah,48h
        je  manu_a
        cmp ah,50h
        je  manu_e
        jmp manu_hid
manu_n2:
        jmp manu_n1
new_2:  jmp new
save_1: call save
save_2: call saveas

⌨️ 快捷键说明

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