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

📄 interface.asm

📁 汇编的课程设计
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		    JZ 	  pCopy1                                                        
		    JMP       Editexit   
            toPaste1:     JMP       toPaste     
	      
		pCopy1:      JMP	       pCopy                                                                                                                                                                                     
		toCut:           
		    win       3,32,3,41,copyActive
		    poscur    3,31                 
		    show      Edit_1
		    win       5,32,5,41,pasteActive         
		    poscur    5,31             	
		    show      Edit_3                
		    win       4,32,4,41,67h        
		    poscur    4,31             	
		    show      Edit_2 
                showM	  mess22  
		    GEtchar
		    CMP		AH,50h
		    JZ   		toPaste   
		    CMP      	 AH,48h
		    JZ        	toCopy1                              
		    CMP 		AH,1ch   
		    JZ    		PCut1
		    JMP       	EditExit 
            toCopy1:     JMP       toCopy    		  
		PCut1:     JMP		PCut                          
		toPaste:           
		    win       4,32,4,41,copyActive
		    poscur    4,31                 
		    show      Edit_2
		    win       3,32,3,41,copyActive         
		    poscur    3,31             	
		    show      Edit_1               
		    win       5,32,5,41,67h        
		    poscur    5,31             	
		    show      Edit_3  
                showM	  mess23 
		    GEtchar
		    CMP  AH,50h
		    JZ   toCopy2 
		    CMP       AH,48h
		    JZ        toCut1                     
		    CMP AH,1ch   
		    JZ    pPaste1
		    JMP       EditExit 
		toCut1:    JMP       toCut  
		pPaste1:   JMP       pPaste              
		toCopy2:   JMP       toCopy  
		                                         
              
;****处理不同的分支所调用的不同的函数.****/              
                                       
pCopy:      
              CALL      CopyEdit
              JMP       EditExit
PCut:      
              CALL	CutEdit
              JMP       EditExit
pPaste:       
              CALL	PasteEdit
              JMP       EditExit
EditExit:        
              CALL      menuHide 
              CALL      BackDisplay             
              poscur 	row,column              
              recover
              RET
showMenuE     ENDP                            
 ;*************************************
CopyEdit      PROC
              saveE                                    
exitCopyEdit:               
              recover
              RET
CopyEdit      ENDP
cutEdit      PROC
              saveE
                                            
              recover
              RET
cutEdit      ENDP
pasteEdit      PROC
              saveE         
 exitPasteEdit:                         
              recover
              RET
pasteEdit      ENDP                                                        
;显示帮助
 showmenuh     PROC
              saveE 
              posgets
              CALL      SaveDisplay
              win       10,15,16,67,07h
              win       9,14,15,66,0E4h               
              poscur    10,5
              show      mess16 
              poscur    11,5	
              show      mess17
              poscur    12,5
              show      mess18 
              poscur    13,5	
              show      mess19    
              win	      14,15,14,66,0EDh
              poscur    14,5
              show	mess20                     
		  GEtchar
              CALL	BackDisplay  
              poscur	row,column           
              recover  
              RET
                       
 showmenuh     ENDP               
;*****播放第一首歌*********                
 music1play   PROC 
              saveE
 exitSoundf1: 
              recover             	
              RET
soundf1	ENDP    
;*****播放第二首歌*********                                       
 music2play   PROC
              saveE
              recover
              RET
 music2play   ENDP
 scaleplay   PROC
              saveE

              recover
	      RET
 scaleplay   ENDP
  
 gunplay   PROC
              saveE
	
              recover
	RET
 gunplay   ENDP

;*********按下新建菜单时的处理函数******
;入口参数有:musicInt:文件数量,一进入即增加1
;先隐藏菜单,并用默认名创建文件,文件名根据musicInt来自动判断并更改
;最后调用函数:editFile进入编辑状态.                                                                                                              
 filenew      PROC
              saveE
              recover
              RET
 filenew      ENDP 
;*********最重要的函数之一**********
;可能被fileNew函数、fileOpen函数调用
;获取键盘输入,按照输入跳到不同的分支,
;每个分支都调用相应的函数来处理.    
;注意不同的分支处理缓冲区的方式也不同              
;处理函数是相应的键名+K,以区别以其标号
                                                         
 EDItfile     PROC
              saveE     
              recover                                                        
              RET
 EDItfile     ENDP  
 ;**********退出编辑状态时判断是否需要保存的模块***************
 ;当文件未保存时调用的函数             
 ;入口参数为saveY,当用户输入Y/y时调用filesaveas函数进行保存
 ;当用户输入N/n时不保存,用户输入有误时提示再输入一次.
 ;出口参数 AsOrIfFlag,它会影响 filesaveas函数的执行分支的选择.
 ;AsOrIfFlag为1时为Ifsave函数调用filesaveas,否则为0时是用户按下
 ;save as菜单做出的函数调用.                                                             
 IFsave       PROC
              saveE
   exitifsave:                          
              recover
              RET
  IFsave      ENDP 

;********按下退格键时响应的函数****       
;1、注意这个函数,它与DEL键的处理函数一样
;都需要修改视频缓冲区来达到被删除字符
;后面的字符都要向前移,2、同时也要修改数据
;缓冲区,否则你看到的屏幕上的字符与实际
;根据缓冲区里的字符储存的文件字符不一致
;3、这些修改是调用movhead函数来实现的.      
;存在问题.                                                                                      
 bak_spk PROC
              saveE		  
   exitbak_spk:                                                  
              recover             
              RET
 bak_spk        ENDP  
;********按下退格键时响应的函数****   
;注意事项请看bak_spk的注释   
;存在问题.                                                                                                                             
 delk PROC
              saveE        
   exitdel:  
                                                        
              recover             
              RET
 delk        ENDP 
 ;********修改视频和数据缓冲区*****
 ;delk 和bak_spk函数将调用之.
 ;1、注意此函数的主体是一个循环,这个循环的入口参数是:
 ;2、CX用来控制循环次数,即修改次数,
 ;cx=21*78-(row-2)*78              
 ;3、BX用来控制B800开始的视频缓冲区的偏移量
 ;BX=row*160+column*2            
 ;4、注意最后一行应该特殊处理, 否则会出现很奇怪的现象
 ;             
 ;存在问题.                                                                                                                                                                             
 MOVahead     PROC
              saveE
                                                               
  EXITMovahead:                                                   
              recover
              RET
 MOVahead     ENDP       
 MOVBack      PROC
              saveE                                                             
  EXITMovBack:                                                     
              recover
              RET
 MOVBack      ENDP                          
 ;************文件打开函数*********
 ;文件操作:有打开,读取调用
 ;先提示用户正确输入文件名称,错误时要特殊处理
 ;                                                                      
 fileopen      PROC
              saveE      
  exitopen:   
              recover            
              RET
 fileopen      ENDP 
 ;**************文件保存模块***********
 ;功能:响应用户的save命令
 ;如果没有另存文件,则以默认文件名保存.                                       
   filesave      PROC
              saveE             

     exitsave:              
              recover                  
              RET
 filesave      ENDP 
;****文件另存为菜单的响应处理函数
;入出口功参数:modifyFlay,AsOrIfFlag,两者的意义见数据段定义处.
                                          
  filesaveas      PROC
              saveE        
             
  exitsaveas: 
              recover        
              RET
 filesaveas      ENDP                                  
 ;*************************************
;将BAK[]中储存的视频缓冲区的内容显示到屏幕上. 
BackDisplay PROC NEAR
	 saveE
        MOV BX,0d
        MOV CX,3840d
loop11:
        MOV AX,data_seg
        MOV DS,AX
        MOV DL,bak[BX]
        MOV AX,0b800h
        MOV DS,AX
        MOV DS:[BX],DL
        INC BX
        LOOP loop11
	  recover
        RET
BackDisplay ENDP
;*************************************
;将视频缓冲区的内容储存到BAK[]中备份               
savedisplay PROC NEAR
	  saveE
        MOV AX,0002h
        INT 33h
        MOV BX,0d
        MOV CX,3840d
loop1s:
        MOV AX,0b800h
        MOV DS,AX
        MOV DL,DS:[BX]
        MOV AX,data_seg
        MOV DS,AX
        MOV bak[BX],DL
        INC BX
        LOOP loop1s
        MOV AX,0001h
        INT 33h
	  recover
savedisplay ENDP      
;******************菜单隐藏,******
;用滚屏来实现的                      
menuHide      PROC
		  saveE
              win   0,0,0,79,70h
              poscur 0,0
              show str_menu
              recover
              RET
 menuHide     ENDP  
                   
 ;***********清空文件名缓冲区********             
 CLspath      PROC
              saveE     
              recover              
              RET
  CLspath     ENDP 
 ;*********从文件读取音乐算法****************
 ;此函数还未被调用             
 readFile     PROC
		  saveE

     errorexit:                                                                       
		  recover
              RET
readFile     ENDP             
 ;****************显示行列的信息*********
 ; R:row,C:column    
 ;用除10取余来实现,同时修改数据段中的mess6,
 ;再显示到屏幕的相应位置即可.     
 ;***************************************                                                     
  showRC      PROC
              saveE

              recover
              RET
  showRC      ENDP                                      
 ;代码段结束.                                                             
 ;************************************       
                                                                                                                           
      code_seg       ENDS
        END       start
                        
              
              
                
 

⌨️ 快捷键说明

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