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

📄 muedit.asm

📁 汇编的课程设计
💻 ASM
📖 第 1 页 / 共 5 页
字号:
              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:    
              ;根据行号的不同选择不同的分支.
              CMP       row,23             
              JZ        EXITMovahead             
              MOV       BX,ES:[SI+6]
              MOV       ES:[SI],BX
              ADD       SI,6  
              MOV       DL,1
  AHeadContine:   
              LOOP      LOOPahead                                                                
  EXITMovahead:                                        
              POP       ES             
              recover
              RET
 MOVahead     ENDP       
 MOVBack      PROC
              saveE
              PUSH      ES
              PUSH      AX
       	  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  
              MOV       DH,row
              ;循环改变视频缓冲区.   
              POP       AX  
 LOOPBack:    
              INC       DL                
              CMP       DL,79				;如果79列,跳到BACK1特殊处理      
              JZ        Back1			                     
              MOV       BX,ES:[SI+2]		;
              CMP       BL,20h			;千万注意:寄存器里的存放顺序与存储器中的正好相反
              JZ        exitLoop                            
              JMP       BackContine
   exitLoop:  
              MOV       ES:[SI+2],AX             
              JMP       EXITMovBack                    

  Back1:    
              ;根据行号的不同选择不同的分支.
              CMP       DH,24
              JMP       EXITMovBack			;留下接口,等实现了翻页功能后再做变动.
              MOV  	ES:[SI+6],AX
              MOV       AX,BX
              ADD       SI,6                
              MOV       DL,1
              INC       DH
              LOOP      LOOPBack
  BackContine:             
              MOV  	ES:[SI+2],AX
              MOV       AX,BX
              ADD       SI,2 
              LOOP      LOOPBack                                                                
  EXITMovBack:                                        
              POP       ES                  
              recover
              RET
 MOVBack      ENDP                          
 ;************文件打开函数*********
 ;文件操作:有打开,读取调用
 ;先提示用户正确输入文件名称,错误时要特殊处理
 ;                                                                      
 fileopen      PROC
              saveE     
              MOV       modifyFlag,1                     
              CALL      menuHide 
              CALL      BackDisplay

⌨️ 快捷键说明

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