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

📄 muedit.asm.bak

📁 汇编的课程设计
💻 BAK
📖 第 1 页 / 共 5 页
字号:
              MOV       pasteBuffer[SI],AL
              INC       SI
              INC       DL
              poscur	DH,DL
              LOOP      copyLoop
              MOV       pasteBuffer[SI],24h                                          
exitCopyEdit:               
              recover
              RET
CopyEdit      ENDP
cutEdit      PROC
              saveE
              CMP       copyFlag,0
              JZ        exitCutedit
              MOV       pasteFlag,1
              MOV       CL,pasteNum
              MOV       CH,0 
              poscur	rowbak,columnbak  
              MOV       DH,rowbak
              MOV       DL,columnbak              
              MOV       SI,0           
cutLoop:     
              readchar
              MOV       pasteBuffer[SI],AL              
              INC       SI
              INC       DL
              poscur	DH,DL
              LOOP      cutLOOP
              MOV       pasteBuffer[SI],24h                  
exitCutEdit:
              posgets
              poscur	rowbak,columnbak  
              MOV       DH,rowbak
              MOV       DL,columnbak  
              CALL      BackDisplay                          
 LOOPclearCut:								;此循环是为了恢复反显文本 
              MOV       AL,20h                                  
              MOV       BX,0017h
              MOV       CX,1 
              MOV       AH,09h             
              INT       10h              
              DEC       SI 
              INC       DL
              poscur	DH,DL
              CMP       SI,0
              JNZ       LOOPclearCut
              CALL      savedisplay            
              poscur    row,column                                           
              recover
              RET
cutEdit      ENDP
pasteEdit      PROC
              saveE
              CALL      backdisplay
              poscur	row,column
              CMP       pasteFlag,0
              JZ        exitPasteEdit 
              posgets 
              MOV       CL,pasteNum
              MOV       CH,0
              MOV       SI,0
  LOOPPaste:  
              CMP       column,79
              JNZ       continuePaste
              MOV       column,1
              INC       row
              poscur	row,column
    continuePaste:
              INC       column
              MOV		DL,pastebuffer[SI]
        	  INC 	SI
       	  MOV 	AH,2
       	  INT 	21h
     	        LOOP 	LOOPPaste                          
              CALL	saveDisplay 
              mov	modifyFlag,0            
 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
      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

⌨️ 快捷键说明

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