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

📄 muedit.asm

📁 汇编的课程设计
💻 ASM
📖 第 1 页 / 共 5 页
字号:
              CALL	BackDisplay  
              poscur	row,column           
              recover  
              RET
                       
 showmenuh     ENDP               
;*****播放第一首歌*********                
 music1play   PROC 
              saveE
      CALL      menuHide  
      CALL      BackDisplay              
	LEA	SI,music
	LEA	BP,time
   freq1:
	MOV	DI,[SI]
	CMP	DI,0
	JE	endmusic1
	CALL	soundf1
	ADD	SI,2
	ADD	BP,2
	JMP	freq1
   endmusic1:
	MOV	AL,48h
	OUT	61h,AL
  EXITMuP1:
              recover
		  RET
 music1play   ENDP 
 soundf1	PROC	
              saveE
	MOV	AL,0b6h		;位组合格式:通道2,两字节计数,模式3,二进制码
	OUT	43h,AL
	MOV	DX,12h
	MOV	AX,348ch
	DIV	DI		;(di)=频率
	OUT	42h,AL		;频率计数值送通道二
	MOV	AL,AH
	OUT	42h,AL
	IN	AL,61h
	MOV	AH,AL
	OR	AL,3
	OUT	61h,AL		;关闭扬声器

	MOV	BL,[BP]
up:
	MOV	CX,16572
	CALL	waitf1
	DEC	BL
	JNZ	up	
 exitSoundf1: 
              recover             	
              RET
soundf1	ENDP    
waitf1	PROC	
	saveE
waitf2:
	IN	AL,61h
	AND	AL,10h
	CMP	AL,AH
	JE	waitf2
	MOV	AH,AL
	LOOP	waitf2
	recover
	RET
waitf1	ENDP                                             
 music2play   PROC
              saveE
              CALL      menuHide
              CALL      BackDisplay
              recover
              RET
 music2play   ENDP
 scaleplay   PROC
              saveE
	LEA	SI,music1
	LEA	BP,time1
freq2:
	MOV	DI,[SI]
	CMP	DI,0
	JE	endmusic2
	MOV	BX,DS:[BP]
	CALL	soundy
	ADD	SI,2
	ADD	BP,2
	JMP	freq2
endmusic2:
	MOV	AL,48h
	OUT	61h,AL
	JMP	exit1
exit1:
              recover
		  RET
 scaleplay   ENDP
soundy	PROC	
              saveE

wait1:
	MOV	CX,2801
delay:
	LOOP	delay
	DEC	BX
	JNZ	wait1

	MOV	AL,0b6h
	OUT	43h,AL
	MOV	DX,12h
	MOV	AX,348ch
	DIV	DI
	OUT	42h,AL
	MOV	AL,AH
	OUT	42h,AL
	IN	AL,61h
	MOV	AH,AL
	OR	AL,3
	OUT	61h,AL
	CALL	waitf1
              recover
	RET
soundy	ENDP              
 gunplay   PROC
              saveE
	MOV	CX,50d
newshoot:
	PUSH	CX
	CALL	shoot
	MOV	CX,4000h
silent:
	LOOP	silent
	POP	CX
	LOOP	newshoot
	MOV	AL,48h
	OUT	61h,AL
              recover
	RET
 gunplay   ENDP
shoot	PROC	
              saveE
	MOV	DX,140h
	MOV	BX,200h
	IN	AL,61h
	AND	AL,11111100b	;关断定时器通道2的门控
sound:
	XOR	AL,2d			;触发61h端口的第一位
	OUT	61h,AL
	ADD	DX,9248h
	MOV	CL,3
	ROR	DX,CL
	MOV	CX,DX
	ADD	CX,1ffh
	OR	CX,10
waits:
	LOOP	waits
	DEC	BX
	JNZ	sound

	AND	AL,11111100b
	OUT	61h,AL			;恢复61h端口
              recover
		  RET
shoot	ENDP 
;*********按下新建菜单时的处理函数******
;入口参数有:musicInt:文件数量,一进入即增加1
;先隐藏菜单,并用默认名创建文件,文件名根据musicInt来自动判断并更改
;最后调用函数:editFile进入编辑状态.                                                                                                              
 filenew      PROC
              saveE
              MOV 	modifyFlag,0
              CALL	menuHide              
              win		1,28,1,56,70h		;写文件名      
              MOV       SI,8
              INC       musicInt             
              INC       musicname[SI] 
              poscur	 1,35
              show  	musicname                         
              win  	2,1,23,78,017h		;工作区为蓝底白字
              MOV       row,2
              MOV       column,1
              poscur	row,column
	        CALL      EDItfile
              recover
              RET
 filenew      ENDP 
;*********最重要的函数之一**********
;可能被fileNew函数、fileOpen函数调用
;获取键盘输入,按照输入跳到不同的分支,
;每个分支都调用相应的函数来处理.    
;注意不同的分支处理缓冲区的方式也不同              
;处理函数是相应的键名+K,以区别以其标号
                                                         
 EDItfile     PROC
              saveE     
       MOV       BX,0
       CHargetF:
       	  posgets	
       	  poscur	24,0
      	  show	mess15       
              ;根据modifyFlag的值来显示是否已修改的信息.
              poscur	24,43
              CMP       modifyFlag,0
              JZ		MODifyMess
              show	mess14
              JMP       showedMess
    MODifyMess:
              show	mess13 
    showedMess:
              poscur	row,Column                       
              CALL      showRC  
                                  ;从键盘读字符 ah=扫描码 al=字符码                
              MOV       AH,12h
              INT       16h
              AND       AL,00000011b
              JZ        notshift1                
              posgets
              MOV       rowbak,DH
              MOV       columnbak,DL                       
 shift:
              MOV       CLearFlag,1       
              GEtchar              
              PUSH      AX
              MOV       AH,12h
              INT       16h
              AND       AL,00000011b
              JZ        exitshift     
              POP       AX      
      ;  	  CMP  	AH,48h                    ;上;待实现
       ; 	  JZ   	ups
        ;      CMP  	AH,50h                    ;下;待实现

       ;	  JZ   	downs                
        	  CMP  	AH,4bh                    ;左
       	  JZ   	leftS
       	  CMP  	AH,4dh                    ;右
    	        JZ  	rightS                 
              JMP       exitShift 
 notshift1:   JMP       NOTshift                        
 exitRet13:   JMP       exitRet                         
 ups:         CALL      upSProc
              JMP       shift
 downs:       CALL      downSProc  
              JMP       shift                        
 LEfts:       CALL      LEftSProc				;S表示:selet
              JMP       shift
 rights:      CALL      rightsProc				;
              JMP       shift   
                                                                                      
 exitShift:  
 		  POP       AX
              JMP       NOTshift2                                                                                                
 NOTshift:    
              Getchar              	
 NOTshift2:   
                        
              posgets   
     	        LEA DX,buffer
              MOV buffer[BX],AL
              INC       totalChars
              INC 	BX                 
        	  CMP  AH,48h                    ;上
        	  JZ   upk1
              CMP  AH,50h                    ;下
       	  JZ   down1
        	  CMP  AH,4bh                    ;左
       	  JZ   left1
       	  CMP  AH,4dh                    ;右
    	        JZ   right1
              CMP  AH,1ch                    ;回车
       	  JZ   enter1 
              CMP AH,47h                ;home
    	        JZ  home1
       	  CMP AH,4fh                ;end
       	  JZ  _END1
       	  CMP AH,0eh                ;backspace
      	  JZ  bak_sp1
     		  CMP AH,53h
       	  JZ  del1
      	  CMP	AH,3bh             
	     	  JZ	showFilen1              
     	        CMP   AH,3ch
     		  JZ     showPlayn1
              CMP       AH,3Dh
              JZ        showEditn1
      	  CMP     AH,3Eh
              JZ    showhn1
              CMP       AH,01H
              JZ        exitRet1
              JMP       JMPsNext 
JMPs:
upk1:         JMP       upk              
down1:        JMP       down              
left1:        JMP       left              
right1:       JMP       right              
enter1:       JMP       enter              
home1:        JMP       home              
_END1:        JMP       _END              
bak_sp1:      JMP       bak_sp              
del1:         JMP       del              
showFilen1:   JMP       showFilen
showPlayn1:   JMP       showPlayn 
showEditn1:   JMP       showEditn                                 
showhn1:      JMP	 	showhn 
exitRet1:     JMP       exitRet                                     
JMPsNext:              
              CMP       AL,0
              JZ		CHargetF12             
              PUSH	AX
              readChar
              CMP       AL,20h				;此处是判断是否需要后移文本
              JZ        putcharDirect  			;需要则调用MOVBACK
              posGets     
              CALL      MovBack
    putcharDirect: 
              POP       AX         
              CMP       column,79
              JNZ       putchar1
              MOV       column,1
              INC       row
              poscur    row,column  
      putchar1:
              INC       column           		    
              putchar  AL       
              MOV       modifyFlag,0
              CMP       CLearFlag,0
              JZ       CHargetf1
              JMP      CHargetF13 
  CHargetF12: JMP       CHargetf1                         
  CHargetF13:            
              MOV       CL,pasteNum
              MOV       CH,0
              MOV       SI,CX
              posgets
              poscur	rowbak,columnbak  
              MOV       DH,rowbak
              MOV       DL,columnbak                            
 LOOPclear:								;此循环是为了恢复反显文本
              readChar                                      
              MOV       BX,0017h
              MOV       CX,1 
              MOV       AH,09h             
              INT       10h              
              DEC       SI 
              INC       DL
              poscur	DH,DL
              CMP       SI,0
              JNZ       LOOPclear   
          ;    mov	pasteFlag,0         
           ;   MOV       pasteNum,0
              MOV       CLearFlag,0
              MOV       CopyFlag,0
              poscur    row,column
      CHargetF1:    
              JMP       CHargetF
      upk:    CALL      upk2
              JMP       CHargetF
      down:   CALL      downk
              JMP       CHargetF
      LEft:   CALL      LEftk
              JMP       CHargetF
      right:  CALL      rightk
              JMP       CHargetF
      enter:  CALL      enterk
              JMP       CHargetF
      home:   CALL      homek
              JMP       CHargetF
      _END:   CALL      ENDk
              JMP       CHargetF        
      bak_sp: CALL      bak_spk
              JMP       CHargetF
      del:    CALL      delk  
              JMP       CHargetF      
      showfilen:CALL      showmenuF
              JMP       CHargetF
      showplayn:CALL      showmenup

⌨️ 快捷键说明

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