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

📄 muedit.asm.bak

📁 汇编的课程设计
💻 BAK
📖 第 1 页 / 共 5 页
字号:
              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
              JMP       CHargetF
      showEditn: 
              CALL      showMenuE
              JMP       CHargetF       
      showhn:   CALL      showmenuh 
              JMP       CHargetF                                   
      exitRet:
              CMP        modifyFlag,0
              JNZ        exitedit
              CALL      IFsave              
      exitedit:        
              MOV       SI,8
              DEC       musicname[SI]
              DEC       musicInt
              recover                                                        
              RET
 EDItfile     ENDP  
 ;**********退出编辑状态时判断是否需要保存的模块***************
 ;当文件未保存时调用的函数             
 ;入口参数为saveY,当用户输入Y/y时调用filesaveas函数进行保存
 ;当用户输入N/n时不保存,用户输入有误时提示再输入一次.
 ;出口参数 AsOrIfFlag,它会影响 filesaveas函数的执行分支的选择.
 ;AsOrIfFlag为1时为Ifsave函数调用filesaveas,否则为0时是用户按下
 ;save as菜单做出的函数调用.                                                             
 IFsave       PROC
              saveE
              win       10,15,12,67,07h
              win       9,14,11,66,24h               
              poscur    10,15
              show      mess3   
  GEtcharIS:              
              GEtchar  
              CMP       AL,59h
              JZ        saveY
              CMP       AL,79h
              JZ        saveY
              CMP       AL,6Eh
              JZ        exitifsave
              CMP       AL,4Eh
              JZ        exitifsave
              poscur    24,0
              show  	mess5
              JMP       GEtcharIS
   saveY: 
              MOV       AsOrIfFlag,1
              CALL      filesaveas      
   exitifsave:                          
              recover
              RET
  IFsave      ENDP 
upsproc       PROC
              saveE
              recover
              RET
upsproc       ENDP 
downsproc       PROC
              saveE
              recover
              RET
downsproc       ENDP
leftsproc       PROC
              saveE
              posgets  
              readChar            
              MOV       copyFlag,1              
              MOV       BL,pasteNum
              MOV       BH,0              
              MOV       BX,0071h
              MOV       CX,1 
              MOV       AH,09h             
              INT       10h 
              INC       pasteNum
              CMP       column,1
              JZ        exitlefts
              MOV       AL,column
              DEC		AL
              poscur	row,AL
              INC       AL
              MOV       columnbak,AL
              MOV       DL,row
              MOV       rowbak,DL                		                           
exitlefts:                                        
              recover
              RET
leftsproc      ENDP 
                           
rightsproc       PROC
              saveE
              MOV       copyFlag,1
              readChar              
              MOV       BL,pasteNum
              MOV       BH,0
              INC       pasteNum
              MOV       BX,0071h
              MOV       CX,1 
              MOV       AH,09h             
              INT       10h 
              posgets
              CMP       column,79
              JZ        exitrights
              INC		column
              poscur	row,column 
              posgets         
exitrights:              
              recover
              RET
rightsproc       ENDP              
                                                       
;********按下向上的方向键时响应的函数****                                                             
 upk2 PROC
              saveE
              posgets
              CMP       row,2
              JZ        exitup
              DEC       row
              poscur	row,column
  exitup:     recover                         
              RET
  upk2        ENDP 
;********按下向下的方向键时响应的函数****
 downk 	      PROC
              saveE
              posgets
              CMP       row,23
              JZ        exitdown
              INC       row
              poscur	row,column
  exitdown:   recover                
              RET
 downk        ENDP  
;********按下向左的方向键时响应的函数****                                       
 LEftk PROC
              saveE
              posgets
              CMP       column,1
              JZ        exitleft
              DEC		column
              poscur	row,column
  exitleft:   recover                             
              RET
 LEftk        ENDP  
;********按下向右的方向键时响应的函数****              
 rightk PROC
              saveE
              posgets
              CMP       column,78
              JZ        exitright
              INC		column
              poscur	row,column
  exitright:  recover                
              RET
 rightk        ENDP
;********按下回车时响应的函数****   
;存在问题:                         
 enterk PROC             
              saveE
              posgets
              CMP       row,23
              JZ        exitenter              
              INC       row             
              MOV       column,1
              poscur	row,column 
  exitenter:              
              recover             
              RET          
  enterk      ENDP  
;********按下home时响应的函数****                              
 homek PROC
              saveE
              posgets
              MOV		column,1           
              poscur	row,column            
              recover             
              RET   
 homek        ENDP 
 ;********按下end时响应的函数****               
 ENDk PROC
              saveE
              posgets
              MOV		column,78           
              poscur	row,column            
              recover             
              RET 
 ENDk        ENDP 
;********按下退格键时响应的函数****       
;1、注意这个函数,它与DEL键的处理函数一样
;都需要修改视频缓冲区来达到被删除字符
;后面的字符都要向前移,2、同时也要修改数据
;缓冲区,否则你看到的屏幕上的字符与实际
;根据缓冲区里的字符储存的文件字符不一致
;3、这些修改是调用movhead函数来实现的.      
;存在问题.                                                                                      
 bak_spk PROC
              saveE
              posgets
              ;列号不同跳到不同的分支.
              CMP       column,1
              JZ        bak_spk1
              DEC       column
              JMP       deal
  bak_spk1:   
              CMP       row,2
              JZ        exitbak_spk
              DEC       row
              MOV       column,78             
   deal:     
              poscur	row,column
              putchar   0 
              poscur    row,column 
              CALL      MOVahead  		  
   exitbak_spk:                                                  
              recover             
              RET
 bak_spk        ENDP  
;********按下退格键时响应的函数****   
;注意事项请看bak_spk的注释   
;存在问题.                                                                                                                             
 delk PROC
              saveE
              posgets
              ;列号不同跳到不同的分支.
              CMP       column,78
              JZ        delk1
              INC       column
              JMP       deldeal
  delk1:   
              CMP       row,23
              JZ        exitdel
              INC       row
              MOV       column,1             
   deldeal:     
              poscur	row,column
              putchar   0 
              poscur    row,column 
              CALL      MOVahead               
   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
              PUSH      ES
       	  MOV 	AX,0b800h
   	        MOV 	ES,AX
              MOV       SI,0
              ;计算SI
              MOV       AL,160d 
              MUL       row   
              MOV       SI,AX           
              MOV       AL,2d
              MUL       column
              ADD       SI,AX
              ;计算CX
              MOV       AX,0
              MOV       AL,78d
              MOV       AH,row 
              SUB       AH,2             
              MUL       AH
              MOV       DL,column
              DEC       DL
              MOV       DH,0
              ADD       AX,DX
              MOV       CX,1638d 
              SUB       CX,AX 
              MOV       DL,column  
              ;循环改变视频缓冲区.     
 LOOPahead:   
 exchang:           
              INC       DL
              CMP       DL,79
              JZ        AHead1                           
              MOV       BX,ES:[SI+2]      
              MOV       ES:[SI],BX
              ADD       SI,2
              JMP       AHeadContine
  AHead1:    

⌨️ 快捷键说明

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