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

📄 wordedit.asm

📁 本人汇编课程设计
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	jmp	manu_o
open_0:	jmp	open_1				;仅供中间跳转
manu_s:
        win 0,70h,2,0,2,10
        pos_curse 0,2,0
        string manu_2
        win 0,0fh,3,0,3,10
        pos_curse 0,3,0
        string manu_3
        red_chr
        cmp 	al,0dh
        jz  	save_0
        cmp 	ah,48h
        je  	manu_o0
        cmp 	ah,50h
        je  	manu_a
        jmp 	manu_hid
open_1: jmp 	open_2
manu_n1:
        jmp manu_n
manu_s0:
        win 0,70h,4,0,4,10
        pos_curse 0,4,0
        string manu_4 
	jmp	manu_s
save_0:	jmp	save_1				;仅供中间跳转
manu_a:
        win 0,70h,3,0,3,10
        pos_curse 0,3,0
        string manu_3
        win 0,0fh,4,0,4,10
        pos_curse 0,4,0
        string manu_4 
        red_chr
        cmp 	ah,1ch
        jz  	save_2
        cmp 	ah,48h
        je  	manu_s0
        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
manu_a0:
        win 0,70h,5,0,5,10
        pos_curse 0,5,0
        string manu_5
	jmp	manu_a
manu_e:
        win 0,70h,4,0,4,10
        pos_curse 0,4,0
        string manu_4
        win 0,0fh,5,0,5,10
        pos_curse 0,5,0
        string manu_5
        red_chr
        cmp 	ah,50h
        je  	manu_n2
        cmp 	ah,48h
        je  	manu_a0
        cmp 	ah,1ch
        je  	exit 
        jmp 	manu_hid
exit:							   ;退出程序
        call 	backdisplay
        win 0,06h,15,10,17,61
        win 0,70h,14,9,16,60
        mov 	dh,15
        mov 	dl,9
        mov 	bh,0
        mov 	ah,2
        int 	10h
	lea  	dx,message4                                    ;退出前是否保存?
        mov 	ah,9     
        int 	21h
        mov 	ah,1
        int 	21h
        cmp 	al,79h
        jnz 	quit
        call 	save_p					    ;输入Y则保存,N或其他则退出且不保存
quit:   win 0,07h,0,0,24,79
        pos_curse 0,0,0
        mov 	ah,4ch
        int 	21h
          
        pop 	bx
                
        ret
menu_show endp
;------------------------------新建文件-------------------------------------
new proc near
        push 	ax
        push 	cx
        push	bx
        push 	dx
ds1:                                                ;打开新档案前是否储存旧档案?
	win 0,07h,15,10,17,61
        win 0,70h,14,9,16,60
        mov 	dh,15
        mov 	dl,9
        mov 	bh,0
        mov 	ah,2
        int 	10h
        lea 	dx,message4
        mov 	ah,9
        int 	21h
        mov 	ah,1
        int 	21h
	cmp 	al,79h				   ;输入Y则保存,N则不保存,其他字符无效
	je 	sa
	cmp 	al,6eh
	je 	nsa
	jmp 	ds1
sa:
	call 	save_p
nsa:
        pos_get					    ;提示输入新档案名
        push 	dx
        call 	backdisplay
        win 0,06h,15,10,17,61
        win 0,70h,14,9,16,60,
        mov 	dh,15
        mov 	dl,9
        mov 	bh,0
        mov 	ah,2
        int 	10h
        lea 	dx,message1
        mov 	ah,9
        int 	21h
        
        pos_get					
	mov	tempLine,dl			;保存菜单中第一个待输入实际字符的位置
        mov 	bx,0
all:
	mov 	ah,0				;输入一个字符
        int 	16h                        	

	cmp	ah,1ch				;回车
        je  	alll
	cmp	ah,0eh				;退格
	je	backA			

	mov 	ah,2				
        mov 	dl,al				
        int 	21h				

	pos_get					
	cmp	dl,60				;判断字符输入是否已达最大值
	je	tempA1


        mov path[bx],al
        inc 	bx
        jmp 	all

backA:					
	pos_get
	cmp	dl,59				;判断光标不否到窗口末端
	je	tempA3			
	cmp	dl,tempLine			;判断光标是否到达输入窗口的前端
	jbe	tempA2
	dec	dl
	jmp	tempA2
tempA3:						;光标在窗口末端时,删除光标当前的字符
        mov 	ah,2
        mov 	dl,00
        int 	21h
	pos_get
	dec	dl
	dec	dl
tempA2:						;删除光标前一个字符
	pos_curse  0,dh,dl			
        mov 	ah,2
        mov 	dl,00
        int 	21h
	pos_get
	dec	dl
	pos_curse  0,dh,dl			
        jmp 	all
	
tempA1:						;光标向前移一位
	pos_get					
	dec	dl				
	pos_curse  0,dh,dl
	jmp	all			
alll:						;清屏,光标置顶,准备开始新的档案输入
        win 0,3eh,15,9,17,61
        pop 	dx
        pos_curse 0,dh,dl
        lea 	dx,path
        mov 	ah,3ch
        mov 	cx,00
        int 	21h
        mov 	handle,ax
        mov 	bx,ax
        mov 	ah,3eh
        int 	21h
        win 0,1fh,1,0,23,79
        mov 	dh,1
        mov 	dl,0
        mov 	bh,0
        mov 	ah,2
        int 	10h
        pop 	dx
        pop	bx
        pop 	cx
        pop 	ax
        jmp 	char_get
new     endp
open_2: jmp open
;-------------------------另存为文件--------------------------------------- 
saveas  proc near
	push 	ax
	push 	bx
	push 	cx
	push 	dx                                                                      
        win 0,3eh,1,0,6,10
        call backdisplay
        win 0,06h,15,10,17,61
        win 0,70h,14,9,16,60,
        mov 	dh,15
        mov 	dl,9
        mov 	bh,0
        mov 	ah,2
        int 	10h
        lea 	dx,message5
        mov 	ah,9
        int 	21h

	pos_get					;获取光标当前位置
	mov	tempLine,dl			;保存菜单中第一个待输入实际字符的位置
        mov 	bx,0
bll: 
	mov 	ah,0				;输入一个字符
        int 	16h                        	

	cmp	ah,1ch				;回车
        je  blll				
	cmp	ah,0eh				;退格
	je	backB				
	
	mov 	ah,2				
        mov 	dl,al				
        int 	21h				

	pos_get					
	cmp	dl,60				;判断字符输入是否已达最大值
	je	tempB1
        mov 	path[bx],al
        inc 	bx
        jmp 	bll
backB:					
	pos_get
	cmp	dl,59				;判断光标不否到窗口末端
	je	tempB3				
	cmp	dl,tempLine			;判断光标是否到达输入窗口的前端
	jbe	tempB2
	dec	dl
	jmp	tempB2
tempB3:						;光标在窗口末端时,删除光标当前的字符
        mov 	ah,2
        mov 	dl,00
        int 	21h
	pos_get
	dec	dl
	dec	dl
tempB2:						;删除光标前一个字符
	pos_curse  0,dh,dl			
        mov 	ah,2
        mov 	dl,00
        int 	21h
	pos_get
	dec	dl
	pos_curse  0,dh,dl			
        jmp 	bll
	
tempB1:						;光标向前移一位
	pos_get					
	dec	dl				
	pos_curse  0,dh,dl			
	jmp	bll				
blll:
        pos_get
        push 	dx
        win 0,1fh,1,0,23,79
        call backdisplay
        pop 	dx
        pos_curse 0,dh,dl
        lea 	dx,path
        mov 	ah,3ch
        mov 	cx,00
        int 	21h
        mov 	handle,ax
        lea 	dx,buffer
        mov 	bx,handle
        mov 	cx,2000
        mov 	ah,40h
        int 	21h
        mov 	bx,handle
        mov 	ah,3eh
        int 	21h
        call 	backdisplay
        pop 	dx
        pop 	cx
        pop 	bx
        pop 	ax
        jmp 	char_get
saveas  endp
;--------------------------打开文件-----------------------------------------
open proc near  
      	win 0,1fh,1,0,23,79              	;清屏                          
        call backdisplay
        push 	ax
        push 	bx
        push 	cx
        push 	dx 
;input:
        win 0,06h,13,14,16,66    
        win 0,70h,12,13,15,65
        pos_curse 0,13,18
        string	message3			;显示Message3
        
        pos_get					
	mov	tempLine,dl			;保存菜单中第一个待输入实际字符的位置
			
        mov 	bx,0				
cll: 	
	mov 	ah,0				;输入一个字符
        int 	16h                        	

	cmp	ah,1ch				;回车
        je  clll				
	cmp	ah,0eh				;退格
	je	backC			
	
	mov 	ah,2				
        mov 	dl,al				
        int 	21h				

	pos_get					
	cmp	dl,65				;判断字符输入是否已达最大值
	je	tempC1
	
				
        mov 	path[bx],al				
        inc 	bx
        jmp 	cll
backC:					
	pos_get
	cmp	dl,64				;判断光标不否到窗口末端
	je	tempC3				
	cmp	dl,tempLine			;判断光标是否到达输入窗口的前端
	jbe	tempC2
	dec	dl
	jmp	tempC2
tempC3:						;光标在窗口末端时,删除光标当前的字符
        mov 	ah,2
        mov 	dl,00
        int 	21h
	pos_get
	dec	dl
	dec	dl
tempC2:						;删除光标前一个字符
	pos_curse  0,dh,dl			
        mov 	ah,2
        mov 	dl,00
        int 	21h
	pos_get
	dec	dl
	pos_curse  0,dh,dl			
        jmp 	cll
	
tempC1:						;光标向前移一位
	pos_get					
	dec	dl				
	pos_curse  0,dh,dl			
	jmp	cll								
clll:
        win 0,1fh,1,0,23,79
        lea 	dx,path
        mov 	ah,3dh				
        mov 	al,0
        int 	21h				;打开文件
        
        mov 	handle,ax			;成功:AX=文件代号;失败:AX=错误码
        		;cmp	handle,01h
        		;jl	yeah
       			; cmp	handle,13h
        		;ja	nomatch				;没有找到路径则显示message6
yeah:	  
        lea 	dx,buffer
        mov 	bx,handle
        mov 	cx,2000
        mov 	ah,3fh
        int 	21h				;读文件或设备
        
        pos_curse 0,1,0
        mov 	cx,1000
        sub 	bx,bx
replay:
        mov 	dl,buffer[bx]
        inc 	bx
        mov 	ah,2
        int 	21h
        loop 	replay				;从缓冲区读出文件内容
        mov 	bx,handle
        mov 	ah,3eh
        int 	21h				;关闭文件
        							
        pos_curse 0,1,0
        mov 	cx,10
        mov 	bx,0
cleapath_3:
        mov 	bl,0
        mov 	path[bx],bl
        loop 	cleapath_3
        pop 	dx
        pop 	cx
        pop 	bx
        pop 	ax
        jmp 	char_get
			;nomatch:                        
			;	win 0,06h,13,14,16,65    
			;	win 0,70h,12,13,15,66
			;	pos_curse 0,13,18
			;	string	message3			;显示Message3
			;	jmp	input
open    endp
;------------------------------保存文件----------------------------------------
save proc near                              
        push 	ax
        push 	bx
        push 	cx
        push 	dx
        pos_get
        push 	dx
        win 0,3eh,1,0,6,10

⌨️ 快捷键说明

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