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

📄 aaa.asm

📁 文本编辑器
💻 ASM
📖 第 1 页 / 共 2 页
字号:
data	segment			;数据段定义
menu	db 'File  Edit  Help',13,10,'$'
menu_1	db 'New',13,10,'$'
menu_2	db 'Open',13,10,'$'
menu_3	db 'Save',13,10,'$'
menu_4	db 'Save as',13,10,'$'
menu_5	db 'Exit ', '$'
edimes_1 db 'Delete',13,10,'$'
edimes_2 db '      Insert',13,10,'$'
edimes_3 db '      Rewrite','$'
painl db 80 dup('='),'$'
message1	db 'Welcome to use this editor     Press F10 active Help','$'
helpmessage1	db '=======Welcome to use this editor=======',13,10,13,10,13,10
			db 18 dup(' '),'Press F1 active File and F2 active Edit',13,10
			db 18 dup(' '), 'The File includes "New,Open,Save,Save as,Exit"',13,10
			db  18 dup(' '),'And the Edit has "Delete,Insert,Rewrite"',13,10,13,10,13,10
			db 18 dup(' '), '========================================',13,10			
			db 18 dup(' '), 'Press any key to quit Help function......$'
x	db ?
y	db ?
buffer  db 23 dup( 80 dup(?) ),'$'
buffer1  db 23 dup( 80 dup(?) ),'$'

r_l      db   'row='         
row      db   '      ' 
         db   'line='  
line     db   '     $'  
path1    db  'D:\xinjian.txt',00

mypath   db  16,?,16 dup(0) 
handle1  dw ?
wrtpath db 'please input newpathnam:','$'   ; 字符串 
opnpath db 'please input openfilename:','$'   ; 字符串 
opnmsg  db '* * * open error * * *',0dh,0ah
error1  db '* * * write error * * *',0dh,0ah 
openfile db 23 dup( 80 dup(?) ),'$'
inse1    db ?
data	ends
;---------------------------------------------
clear	macro			;清屏的宏定义
	mov	ah,6
	mov	al,0
	mov	ch,0
	mov	dh,24
	mov	dl,79
	mov	bh,7
	int	10h
	endm
window	macro	op1,op2,op3,op4,op5,op6		;绘制窗口的宏定义
	mov	ah,6
	mov	al,op1				;al=0初始化窗口或为上卷行数
	mov	ch,op2				;左上角的行号
	mov	cl,op3				;左上角的列号
	mov	dh,op4				;右上角的行号
	mov	dl,op5				;右上角的列号
	mov	bh,op6				;卷入行的属性
	int	10h
	endm
postc	macro	op1,op2,op3			;光标位置的宏定义
	mov	ah,2				;调用BIOS的2号功能
	mov	bh,op1				;页号
	mov	dh,op2				;行号
	mov	dl,op3				;列号
	int	10h
	endm
getc	macro					;读取光标位置的宏定义	
	mov ah,03h
        	mov bh,0
        	int 10h
	endm
win   macro
      clear
	window	1,0,0,0,79,5fh
	window	0,1,0,23,79,3fh
	window	0,24,0,24,79,5fh
	postc	0,0,1
	xianshi	menu
	xianshi	painl
	postc	0,24,0
	xianshi	message1
	postc	0,2,0
      endm 
xianshi	macro	op				;显示字符串的宏定义
	mov	ah,9
	lea	dx,op
	int	21h
	endm
;---------------------------------------------
code	segment
main	proc	far
assume cs:code,ds:data 
start:
	push	ds
	mov	ax,0
	push	ax
	mov	ax,data
	mov	ds,ax

	clear
	window	1,0,0,0,79,5fh
	window	0,1,0,23,79,3fh
	window	0,24,0,24,79,5fh
	postc	0,0,1
	xianshi	menu
	xianshi	painl
	postc	0,24,0
	xianshi	message1
	postc	0,2,0
	
	mov	x,dl
	mov	y,dh	
	call	input_1
ret
main	endp
input_1	proc	near
input:	
	 postc   0,y,x 
    mov	ah,0				;从键盘读取字符
	int	16h

	cmp	ah,4bh				;是左方向功能键吗?
	jnz	noleft

	cmp	x,0				;是,和0比较
	jnz	L1

	cmp	y,1
	jnz	L3
	jmp	input
L1:	dec	x
	jmp	L5
L3:	dec	y
	mov	x,78
L5:	postc	0,y,x
      call row_line
	jmp	input				;获取下一个字符

noleft:
	cmp	ah,4dh				;是右方向功能键吗?
	jnz	noright

	cmp	x,78				;是,和79比较
	jnz	r1
	cmp	y,23
	jnz	r3
	jmp	input
r1:	inc	x
	jmp	r5
r3:	inc	y
	mov	x,0
r5:	postc	0,y,x	
      call row_line
	jmp	input

noright:
	cmp	ah,48h				;是向上功能键吗?
	jnz	noup

	cmp	y,1
	jz	up1
	dec	y
	postc	0,y,x
	call  row_line
up1:	jmp	input

noup:
	cmp	ah,50h				;是向下功能键吗?
	jnz	nodown

	cmp	y,23
	jz	d1
	inc	y
	postc	0,y,x
	call row_line
d1:	jmp	input

nodown:
	cmp	ah,4fh				;是end功能键吗?
	jz	en_d				;是,就换行
	cmp	ah,47h				;是Home功能键吗?
	jz	homf
	cmp	ah,53h				;是Del功能键吗?
	jz	delf
	cmp	ah,0eh				;是Backspace功能键吗?
	jz	backspae
	cmp	ah,1ch				;是Enter功能键吗?
	jz	enter
	cmp	ah,01				;是Escape功能键吗?
	jnz	noescape
	jmp	ext
ext:	window	0,0,0,24,79,0fh
	postc	0,0,0
	ret

en_d:						;end键功能的实现,置光标于当前行尾列	
	getc
	mov	y,dh
	mov	x,79
	postc	0,y,x
	call row_line
	jmp	input

homf:					             ;Home功能键的实现,置光标于当前行首列
	getc
	mov	y,dh
	mov	x,0
	postc	0,y,x
	call row_line
	jmp	input

delf:
	call	delfunc				;调用delfuc子程序
	jmp	input

backspae:					;调用back_spae子程序
	call	back_spae
	jmp	input

enter:						;调用crlf子程序
	call	crlf
	jmp	input

noescape:
	cmp	ah,44h				;是F10功能键吗?
	jz	helpmess
	cmp	ah,3bh				;是F1功能键吗?
	jz	filsec
	cmp	ah,3ch				;是F2功能键吗?
	jz	editemess
	jmp	dispchar

filsec:
	call	fil_second
	jmp	input

editemess:
	call	edi_mess
	jmp	input
	
helpmess:
      clear
      win
	window	0,4,17,21,65,06h
	window	0,3,16,20,64,6fh
	postc	0,4,21
	xianshi	helpmessage1
hh:	mov ah,0
	int 16h
	cmp ah,44h
	jz  hh
	call  backdisp  	
	jmp	input

dispchar:						;在光标位置显示字符                                    
	  mov ah,2
        mov dl,al
        int 21h
        push ax
        mov bx,80
        sub ax,ax
        mov al,y
        mul bx
        mov bx,ax
        mov al,x
        mov si,ax
        pop  ax
        mov buffer[bx][si],al
        inc x       
        call row_line
        jmp input
huanhang:					;按enter换行
	call	crlf
	inc	y
	postc	0,y,0
	jmp	input
ret	
input_1	endp

delfunc		proc	near			;实现Delete键功能的子程序
u1:	getc
	mov	y,dh
	mov	x,dl
	dec	x
	cmp	x,0
	jnz	lmv
	cmp	y,2
	jnz	umv
	postc	0,y,x
	mov	ah,02h
	mov	dl,00h
	int	21h
	postc	0,y,x
lmv:	jmp	u1
umv:	jmp	u1
ret
delfunc	endp
back_spae	proc	near			;实现Backspace键功能的子程序
	getc
      mov	y,dh
	mov	x,dl
	cmp	x,0
	jz	next
	dec	x
	jmp	abc
next:	mov	x,0
abc:	postc	0,y,x	
	mov 	ah,2
       	mov 	dl,00
       	int 	21h
	postc	0,y,x				;要注意此处定义光标
           ret
back_spae	endp

fil_second	proc	near			;显示FILE的下拉菜单
	push	dx
	window	0,2,1,6,8,06h
	window	0,1,0,5,7,2fh
	postc	0,1,0
	xianshi	menu_1
	xianshi	menu_2
	xianshi	menu_3
	xianshi	menu_4
	xianshi	menu_5
	postc	0,1,0
	pop	dx
	call	compar				;在下拉菜单中判断输入的字符
	
	ret	
fil_second	endp
compar   proc near
      push cx
 xx:  getc
      mov  cl,dh
      mov	ah,0
	int	16h
	cmp	ah,50h
	jz	x1
	cmp   ah,48h
	jz    x2
	cmp   ah,3bh
	jz    x3
	cmp   al,0dh
	jz    x4
	jmp   ext1
;---------------
  x1: cmp cl,5
      jnz x11
      postc 0,1,0
      jmp xx
 x11:  inc cl
       postc 0,cl,0
      jmp  xx
  x2: cmp cl,1
      jnz x22
      postc 0,5,0
      jmp xx
 x22: dec cl
      postc 0,cl,0
      jmp  xx 
  x3: jmp  xx
;---------------  
  x4: cmp cl,1
      jz  new1
      cmp cl,2
      jz  open1
      cmp cl,3
      jz   save1
      cmp  cl,4
      jz   save_as1
      cmp  cl,5
      jz  exit1 
 new1:
      call new
      jmp ext1 
 open1:
      call open
      jmp ext1 
 save1:
     call save
     jmp ext1 
 save_as1:
      call save_as
      jmp ext1 
 exit1:
     call exit
 ext1: pop cx
       call backdisp
       ret
compar	endp
 new		proc	near			;新建文件功能的实现
      push cx
      push bx
      mov  cx,1840
      mov  bx,0
  nw: mov buffer[bx],0
      inc bx
      sub cx,1
      jnz nw
      mov ah,3ch          ; 建立文件
  	mov cx,0
     lea dx,path1
  	int 21h 
  	jc error
  	mov handle1,ax
  	jmp exit2 
error:  lea dx,error1
        mov ah,09h
        int 21h   
 exit2:pop bx 
       pop cx
       ret
new	endp
open		proc	near			;打开文件功能实现
      clear
   win
   push bx 
   
   window 0,9,18,13,68,6fh
   postc  0,11,18
   mov ah,09h
   lea dx,wrtpath
   int 21h
   mov  di,offset mypath
   
sa:mov ah,00h
    int 16h
    cmp ah,1ch				;是Enter功能键吗?
   jz	exit5
   mov dl,al
   mov ah,02   
   int 21h
   mov  [di],al
   inc  di
   jmp  sa
exit5:  
        clear
        win
        mov ah,3dh
        mov al,00        
        lea dx,mypath
        int 21h
        mov handle1,ax
        mov ah,3fh
        mov bx,handle1
        mov cx,1600
        lea  dx,buffer1+160
        int  21h 
        mov bx,160
        postc 0,2,0
        replay:
       mov dl,buffer1[bx]
       inc bx
       mov ah,2
       int 21h
      loop replay

⌨️ 快捷键说明

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