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

📄 muedit.asm

📁 汇编的课程设计
💻 ASM
📖 第 1 页 / 共 5 页
字号:
              CALL      savedisplay              
              win       10,15,12,73,00h
              win       9,14,11,72,0A4H
              poscur    10,15
              show      mess2 
              CALL      CLspath
              MOV       SI,0            
 getfilenameo: 
              MOV       AH,1
        	  INT       21h
              CMP       AL,0dh
              JZ        NAMEgetedo
        	  MOV       path[SI],AL
        	  INC       SI
              CMP       SI,28
              JZ        tooLongo
        	  JMP       getfilenameo
tooLongo:     poscur    24,0
              show	errormess3
              MOV       SI,0
              poscur    10,14
              show      mess4
              CALL      CLspath  
              JMP       GEtfilenameo         
NAMEgetedo:   
             INC       SI
              INC       SI
              MOV       path[SI],24h           
              MOV 	AL,2
              fileIO    path,3Dh
              JC		saerror1o1		;文件无法打开时的异常处理
              MOV 	handler,AX                                         	  
        	  MOV 	BX,handler
        	  MOV 	CX,2000  
              fileIO    buffer,3FH                          
              JC        saerror2o1   	;文件无法读取时的异常处理.
              CALL      BackDisplay       
              win	      1,28,1,56,70h
              poscur    1,30
              show      path               
              win  	2,1,23,78,017h
              poscur	2,1
        	  MOV 	CX,2000
        	  SUB 	BX,BX
              JMP       redisplay
  saerror2o1: JMP       saerror2o             
  saerror1o1: JMP       saerror1o    
              ;文件正常操作时的字符显示
              ;注意列号的控制作用       
   redisplay:
              posgets	
              CMP       column,78
              JNZ       continue
              MOV       column,1
              INC       row
              poscur	row,column
    continue:
              MOV		DL,buffer[BX]
        	  INC 	BX
       	  MOV 	AH,2
       	  INT 	21h
     	        LOOP 	redisplay              
              MOV       BX,handler
              MOV       AH,3EH
              poscur    row,column
              INC 	musicInt
              CALL      EDItfile
              JMP       exitopen            
  saerror1o:   
              poscur    24,1
              show	errormess4
              GEtchar
              win   2,1,23,78,27H     
              JMP       exitsaveas
  saerror2o:   
              poscur	24,1
              show      errormess5
              GEtchar
              win   2,1,23,78,27H
              JMP       exitsaveas               
              GEtchar
  exitopen:   
              GEtchar
              recover            
              RET
 fileopen      ENDP 
 ;**************文件保存模块***********
 ;功能:响应用户的save命令
 ;如果没有另存文件,则以默认文件名保存.                                       
   filesave      PROC
              saveE             
              CALL      menuHide   
              CALL      BackDisplay          
              CMP       musicInt,0
              JZ        exitsave
              CMP       SaveAsFlag,0
              JNZ        NEwname       			
              MOV       CX,00
              fileIO    musicname,3ch
              JC        serror1
              MOV       handler,AX
              MOV       BX,handler
              MOV       CX,2000
              fileIO    buffer,40H
              JC        serror2
              MOV       BX,handler
              MOV       AH,3EH
              INT       21H
              MOV       modifyFlag,1
              JMP       exitsave
  NEwname: 
  serror1:   
              poscur    24,1
              show	errormess1
              JMP       exitsave
  serror2:   
              poscur	24,1
              show      errormess2
              JMP       exitsave                     
            
     exitsave:              
              recover                  
              RET
 filesave      ENDP 
;****文件另存为菜单的响应处理函数
;入出口功参数:modifyFlay,AsOrIfFlag,两者的意义见数据段定义处.
                                          
  filesaveas      PROC
              saveE        
              MOV       modifyFlag,1     
              CALL      menuHide 
       	  CMP       AsOrIfFlag,0
              JNZ       AsOrIfFlagas                     
              CALL      BackDisplay   
      AsOrIfFlagas:                  
              CMP       musicInt,0
              JZ        exitsaveas1
              win       10,15,12,67,07h
              win       9,14,11,66,24h               
              poscur    10,15
              show      mess1 
              CALL      CLspath
              MOV       SI,0
              JMP       getfilename
 exitsaveas1: JMP       exitsaveas
 getfilename: 
              MOV       AH,1
        	  INT       21h
              CMP       AL,0dh
              JZ        NAMEgeted
        	  MOV       path[SI],AL
        	  INC       SI
              CMP       SI,28
              JZ        tooLong
        	  JMP       getfilename
tooLong:      poscur    24,0
              show	errormess3
              MOV       SI,0
              poscur    10,14
              show      mess4
              CALL      CLspath
              JMP       GEtfilename            
NAMEgeted:    
              INC       SI
              INC       SI
              MOV       path[SI],24h            
              MOV       CX,00
              fileIO    path,3ch
              JC		saerror1
              MOV       handler,AX
              MOV       BX,handler
              MOV       CX,2000
              fileIO    buffer,40H
              JC        saerror2
              MOV       BX,handler
              MOV       AH,3EH
              CALL      BackDisplay
              win	      1,28,1,56,70h
              poscur    1,30
              show      path              
     ;         win       9,13,12,67,017h  
              CALL      saveDisplay             
              poscur    row,column
              JMP       exitsaveas
  saerror1:   
              poscur    24,1
              show	errormess1 
              MOV       SI,0
              poscur    10,14
              show      mess4
              CALL      CLspath                          
              JMP       getfilename
  saerror2:   
              poscur	24,1
              show      errormess2
              MOV       SI,0
              poscur    10,14
              show      mess4
              CALL      CLspath                          
              JMP       getfilename                
  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  
CLspaste      PROC 
              saveE
             MOV       CX,25
  LOOPCLspaste:  
              MOV       SI,0
              MOV       path[SI],0        
              INC       SI
              LOOP      LOOPCLspaste                           
              recover
              RET
CLspaste      ENDP                           
 ;***********清空文件名缓冲区********             
 CLspath      PROC
              saveE
              MOV       CX,30
  LOOPlpath:  
              MOV       SI,0
              MOV       path[SI],0        
              INC       SI
              LOOP      LOOPlpath             
              recover              
              RET
  CLspath     ENDP 
 ;*********从文件读取音乐算法****************
 ;此函数还未被调用             
 readFile     PROC
		  saveE
              MOV		AL,2
              fileIO filename,3Dh
              JNC       succsess
              poscur    13,27
              show      error0
              JMP       errorexit
   succsess:
              MOV       handler,AX
              MOV       BX,AX
    read:               
              MOV		CX,1
              fileIO    chartemp,3FH
              putchar   CHartemp
              CMP		CHartemp,30H
              JB		NOTNum
              CMP		CHartemp,39h
              JA		NOTNum
              JMP       number
     NOTNum:  CMP		CHartemp,2ch
              JZ		cut
              CMP       CHartemp,2bh;遇到-号,结束
              JZ		finish11
              poscur    13,27
              show	error1
              poscur    14,27
         ;     putchar   CHartemp
              JMP       errorexit
     number:  MOV		AL,CHartemp
              MOV		SI,bufferflag
              MOV		buffertemp[SI],AL
              INC		Bufferflag
              JMP       read
     cut:     MOV       Bufferflag,0
              MOV		SI,Bufferflag
     LOOP1:  
 ;             show      buffertemp 
              MOV       AL,buffertemp[SI] 
              putchar   buffertemp[SI]                  
              SUB		AL,30h
              MUL       times
              ADD       AX,musictemp
              MOV       musictemp,AX
              MOV		AL,10
              MUL		times
              MOV		times,AX
              DEC		SI
              CMP		SI,0
              JNZ       LOOP1
              MOV       SI,bufferIndex           
              MOV       WORD PTR musicbuffer[SI],AX  
              INC       bufferIndex           
              JMP       read
              finish11: JMP       finish1
      read2:  INC       bufferIndex
              MOV       SI,bufferIndex           
              MOV       WORD PTR musicbuffer[SI],0 
              MOV       bufferIndex,0             
              INC       musicfinish
              MOV		CX,1
              fileIO    chartemp,3FH
      ;        putchar   CHartemp
              CMP		CHartemp,30H
              JB		NOTNum2
              CMP		CHartemp,39h
              JA		NOTNum2
              JMP       number2
     NOTNum2: CMP		CHartemp,2ch
              JZ		cut2
              CMP       CHartemp,2bh;遇到-号,结束
              JZ		finish2
              poscur    13,27
              show	error2
              poscur    14,27
              putchar   CHartemp              
              JMP       errorexit
     number2: MOV		AL,CHartemp
              MOV		SI,bufferflag
              MOV		buffertemp[SI],AL
              INC		Bufferflag
              JMP       cut2
     read21:  JMP       read2
     cut2:    MOV       Bufferflag,0
              MOV		SI,Bufferflag
     LOOP12:  MOV       AL,buffertemp[SI]                   
              SUB		AL,30h
              MUL       times
              ADD       AX,musictemp
              MOV       musictemp,AX
              MOV		AL,10
              MUL		times

⌨️ 快捷键说明

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