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

📄 wordedit.asm

📁 本人汇编课程设计
💻 ASM
📖 第 1 页 / 共 3 页
字号:
        call 	backdisplay
        mov 	ah,path
        cmp 	ah,21h
        jl 	j_3
        jmp 	j_4
j_3: 
        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,message2
        mov 	ah,9
        int 	21h
        
        pos_get					
	mov	tempLine,dl			;保存菜单中第一个待输入实际字符的位置
        mov 	bx,0
dll: 
	mov 	ah,0				;输入一个字符
        int 	16h                        	

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

	pos_get					
	cmp	dl,60				;判断字符输入是否已达最大值
	je	tempD1
        mov 	path[bx],al
        inc 	bx
        jmp 	dll
backD:					
	pos_get
	cmp	dl,59				;判断光标不否到窗口末端
	je	tempD3			
	cmp	dl,tempLine			;判断光标是否到达输入窗口的前端
	jbe	tempD2
	dec	dl
	jmp	tempD2
tempD3:						;光标在窗口末端时,删除光标当前的字符
        mov 	ah,2
        mov 	dl,00
        int 	21h
	pos_get
	dec	dl
	dec	dl
tempD2:						;删除光标前一个字符
	pos_curse  0,dh,dl			
        mov 	ah,2
        mov 	dl,00
        int 	21h
	pos_get
	dec	dl
	pos_curse  0,dh,dl			
        jmp 	dll
	
tempD1:						;光标向前移一位
	pos_get					
	dec	dl				
	pos_curse  0,dh,dl			
	jmp	dll				
dlll:
        win 0,1fh,1,0,23,79
        pop 	dx
        pos_curse 0,dh,dl 
j_4:    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
save endp
;-------------------------被动保存文件------------------------------
save_p proc near                              
        push 	ax
        push 	bx
        push 	cx
        push 	dx
        pos_get
        push 	dx
        win 0,3eh,1,0,6,10
        call 	backdisplay
        mov 	ah,path
        cmp 	ah,21h
        jl 	k_3
        jmp 	k_4
k_3: 
        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,message2
        mov 	ah,9
        int 	21h
        mov 	bx,0
ell: 
        mov 	ah,1
        int 	21h
        cmp 	al,0dh
        je 	elll
        mov 	path[bx],al
        inc 	bx
        jmp 	ell
elll:
        win 0,1fh,1,0,23,79
        pop 	dx
        pos_curse 0,dh,dl 
k_4:    
	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
save_p endp

savedisplay proc near
        push 	ax
        push 	bx
        push 	cx
        push 	dx
        push 	ds
        mov 	ax,0002h
        int 	33h
        mov 	bx,0d
        mov 	cx,3840d
loop1:
        mov 	ax,0b800h
        mov 	ds,ax
        mov 	dl,ds:[bx]
        mov 	ax,data
        mov 	ds,ax
        mov 	bak[bx],dl
        inc 	bx
        loop 	loop1
        mov 	ax,0001h
        int 	33h
        pop 	ds
        pop 	dx
        pop 	cx
        pop 	bx
        pop 	ax
        
        ret
savedisplay endp

backdisplay proc near
        push 	ax
        push 	bx
        push 	cx
        push 	dx
        push 	ds
        mov 	bx,0d
        mov 	cx,3840d
loop11:
        mov 	ax,data
        mov 	ds,ax
        mov 	dl,bak[bx]
        mov 	ax,0b800h
        mov 	ds,ax
        mov 	ds:[bx],dl
        inc 	bx
        loop 	loop11
        pop 	ds
        pop 	dx
        pop 	cx
        pop 	bx
        pop 	ax
        ret
backdisplay endp
quitt   proc near                     ;退出
        call 	backdisplay
        push 	ax
        push 	bx
        push 	cx
        push 	dx
        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,message2
        mov 	ah,9
        int 	21h
        mov 	bx,0
qll: 
        mov 	ah,1
        int 	21h
        cmp 	al,0dh
        je  	qlll
        mov 	path[bx],al
        inc 	bx
        jmp 	qll
qlll:
        win 0,07h,15,10,17,61
        win 0,3eh,14,9,16,60
        call backdisplay
        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 
        win 0,07h,0,0,24,79
        mov 	ah,4ch
        int 	21h
        pop 	dx
        pop 	cx
        pop 	bx
        pop 	ax
        ret
quitt   endp
edit    endp  
;----------------------显示日期-------------------------------                              
win3    proc near
	push	ax
	push	bx                       
        mov 	ah,2ah
        int 	21h
        mov  	bl,10d
        mov  	ax,0
        mov  	al,dh
        div  	bl 
        add  	ax,3030h
        mov  	[date+6],al                    
        mov  	[date+7],ah
        mov  	ax,0
        mov  	al,dl
        div  	bl
        add  	ax,3030h
        mov  	[date+9],al
        mov  	[date+10],ah
        win 0,74h,0,60,0,79			;灰底红字
        pos_curse 0,0,67
        mov  	dx,offset date
        mov  	ah,09h
	int  	21h
	pop	bx
        pop	ax
        ret
win3    endp
;--------------------------显示行//列---------------------------- 
win4    proc  near                             
        push	ax
        push	bx
        
 	mov	ah,2				
	mov	bh,0				
	int	10H				   
        
        mov  	ah,03h
        mov 	bh,0
        int 	10h                                    
        mov  	bl,100d
        mov  	bh,10d
        mov  	ax,0
        mov  	al,dh
        div 	bl 
        add  	al,30h                              
        mov  	[hanglie+0],al
        mov 	al,ah      
        mov 	ah,0                                    
        div 	bh  
        add 	ax,3030h
        mov 	[hanglie+1],al
        mov 	[hanglie+2],ah                                                      
        mov  	ax,0                                       
        mov  	al,dl
        div 	bl 
        add  	al,30h                            
        mov  	[hanglie+5],al
        mov 	al,ah      
        mov 	ah,0                                  
        div 	bh  
        add 	ax,3030h
        mov 	[hanglie+6],al
        mov 	[hanglie+7],ah
        win 0,74h,24,60,24,70			;灰底红字
        pos_curse 0,24,61
        mov  	dx,offset hanglie
        mov  	ah,09h
        int  	21h
        pop	bx
        pop	cx
        ret
win4    endp
;----------------------------插入编辑-------------------------------
insert	proc	near
	push	ax
	push	bx
	push	cx
	push	dx
	
	
	push	ax           			;ax里面存放的扫描码,和字符码
	pos_get		     			;获得光标位置									
	mov	cur,dx
	mov	row,dh
	mov	line,dl
	cmp	al,0dh	     			;是否为回车
	jz	enter1
	mov	al,line      			;列号给al
	cbw		     			;al扩展为ax
	mov	cx,ax	     			;列号保存到cx中
	mov	bl,80	     			;每行80个	
	mov	al,row       			;;获得行号
	dec	al          
	mul	bl           			;行号*80
	add	ax,cx 
	mov	addr,ax       			;ax为输入位子在缓冲区中的下标
	lea	si,buffer
	add	si,80
	add	si,1838
	;mov	addr,1838    			;源串的末地址
	;mov     si,addr      
	mov	di,si
	inc	di           			;目的串末地址
	mov	bx,1839	     	
	sub	bx,ax        			;后移的个数
	mov	cx,bx        			;cx存放后移的个数
	std                  			;反向移动
	rep	movsb	    
	lea	bx,buffer
	;mov	addr,ax      			;addr为输入位子在缓冲区中的下标
	pop	ax           			;ax中存放为扫描码,和字符码
	mov	byte ptr addr[bx],al  		;插入
	jmp	disp         
	
enter1:	
	mov	al,dl       			;dl是列值
	cbw
	mov	cx,80       			;每行80个
	sub	cx,ax       
	push	cx          			;补cx个零
	
	push	ax          			;列值入栈
	mov	bl,80       			;填入空格的个数
	mov	al,dh	    			;行数
	dec	al          
	mul	bl          			;行数*80
	mov	cx,ax       			;ax值为行数*80
	pop	ax          			;ax出栈,列值
	add	cx,ax       			;cx为输入位子在缓冲区中的下标
	mov	addr,cx     			;addr为输入位子在缓冲区中的下标
	pop 	cx          			;补零数出栈
	
	push	cx          			;补零数入栈
	lea	di,buffer      
	add	di,1839     			;目的串末地址
	mov	si,di       			;源串末地址
	sub	si,cx
	inc	si          			;si=di-cx+1
	std                     
	rep	movsb
	pop	cx          			;补零数出栈

	
	lea	bx,buffer
next1:	mov	addr[bx],20h  			;补0
	add	addr,1
	loop	next1
	
disp:   pos_curse 0,1,0
	mov	cx,1840
	mov	si,0
	
next2:	mov	al,buffer[si]   
	;mov	al,31h
	mov	bx,0700
	mov	ah,0eh
	int	10h
	;mov	dl,al
	;mov	ah,02h
	;int	21h
	inc	si
	
	loop	next2
	mov	dx,cur
	mov	row,dh
	mov	line,dl
	add	line,1
	pos_curse 0,row,line
	
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	
	ret
insert	endp
code    ends                           
        end 	start                         
      

⌨️ 快捷键说明

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