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

📄 zifu.txt

📁 本源 代码实现的是汇编语言课程实验---字符处理实验
💻 TXT
字号:
DATA SEGMENT
     STR0  DB  0AH,0DH,'IF YOU WANT TO  SHOW OUT THE STRING INPUT D','$'         ;菜单
     STR1  DB  0AH,0DH,'IF YOU WANT TO  DELET  SOME  CHARS  INPUT E','$'
     STR2  DB  0AH,0DH,'IF YOU WANT TO  INSERT SOME  CHARS  INPUT I','$'
     STR3  DB  0AH,0DH,'IF YOU WANT TO  EXIT   MASM         INPUT Q','$'
     STR4  DB  0AH,0DH,'INPUT FROM WHICH CHAR  YOU WANT TO DELET :','$'          ;提示信息
     STR5  DB  0AH,0DH,'INPUT HOW  MANY  CHARS YOU WANT TO DELET :','$'
     STR6  DB  0AH,0DH,'INPUT FROM WHICH CHAR  YOU WANT TO INSERT:','$'
     STR7  DB  0AH,0DH,'INPUT HOW  MANY  CHARS YOU WANT TO INSERT:','$'
     STR8  DB  'THERE IS   N0     CHAR                    ','$'
     STR9  DB  0AH,0DH,'INPUT WHAT YOU WANT TO DO                :','$'                    
     STR10 DB  'THE  STRING BERORE DELET IS:',24H
     STR11 DB  0AH,0DH,'THE  STRING AFTER  DELET IS:',24H
     STR12 DB  0AH,0DH,'THE  STRING BERORE INSERT IS:',24H
     STR13 DB  0AH,0DH,'THE  STRING AFTER  INSERT IS:',24H
     STR14 DB  0AH,0DH,'YOUR IMFORMATION  IS WRONG  RUTIN AGAIN',24H
     STRI  DB  0AH,0DH,'**************************************************',24H
     STR   DB  256 DUP(?)
     CHARS DB  100 DUP(?)
     COUNT DW  0
     B     DW  0 
DATA ENDS
CODE SEGMENT
     ASSUME CS:CODE,DS:DATA
START:
      MOV  AX,DATA
      MOV  DS,AX
      MOV  AX,0600H               ;清屏
      MOV  BH,61H
      SUB  CX,CX
      MOV  DX,184FH
      INT  10H
      MOV  DX,OFFSET STRI         ;显示菜单
      MOV  AH,09H
      INT  21H
      MOV  DX,OFFSET STR0
      MOV  AH,09H
      INT  21H
      MOV  DX,OFFSET STR1
      MOV  AH,09H
      INT  21H
      MOV  DX,OFFSET STR2
      MOV  AH,09H
      INT  21H
      MOV  DX,OFFSET STR3
      MOV  AH,09H
      INT  21H
      MOV  DX,OFFSET STRI
      MOV  AH,09H
      INT  21H

INPUT:MOV  DX,OFFSET STR9          ;输入字符选择操作
      MOV  AH,09H
      INT  21H
      MOV  AH,01H
      INT  21H
      CMP  AL,'D'
      JZ   D
      CMP  AL,'E'
      JZ   E
      CMP  AL,'I'
      JZ   I
      CMP  AL,'Q'
      JZ   Q
      CALL WRONG                   ;错误输入
      JMP  INPUT
D:    CALL DISP
      JMP  INPUT
E:    CALL ERASE
      JMP  INPUT
I:    CALL INSERT
      JMP  INPUT
Q:    CALL  QUIT
DISP  PROC  NEAR                    ;显示子程序DISP
      PUSH  AX
      PUSH  DX
      PUSH  CX
      PUSH  SI
      MOV   SI,OFFSET STR            ;SI指向STR首地址
      MOV   AX,COUNT                 ;字符个数COUNT
      CMP   AX,0                     ;字符个数为0转  
      JZ    SHOW
      MOV   DL,0AH
      MOV   AH,02H
      INT   21H
      MOV   DL,0DH
      MOV   AH,02H
      INT   21H
      MOV   CX,COUNT                  ;显示字符串    
  LOP:MOV   DL,[SI]                    
      MOV   AH,02H
      INT   21H 
      INC   SI
      LOOP  LOP
      JMP   EXIT
SHOW: MOV   DL,0AH
      MOV   AH,02H
      INT   21H
      MOV   DL,0DH
      MOV   AH,02H
      INT   21H 
      MOV   DX,OFFSET STR8              ;显示空串
      MOV   AH,09H
      INT   21H
EXIT: 
      POP   SI
      POP   CX
      POP   DX
      POP   AX
      RET
DISP  ENDP
ERASE PROC  NEAR                        ;删除子程序
      PUSH  AX
      PUSH  BX
      PUSH  CX
      PUSH  DX
      PUSH  SI
      PUSH  DI
LOP0: MOV   DX,OFFSET STR4               ;提示信息
      MOV   AH,09H
      INT   21H
      CALL  NUMBER                       ;输入从第几个字符开始删除
      MOV   BX,B                         ;放入BX
      MOV   DI,B
      CMP   BX,COUNT                     ;和字符总数比较 
      JB    LOP1                         ;小于转
      CALL  WRONG                        ;错误提示
      JMP   LOP0
LOP1:
      MOV   DX,OFFSET STR5               ;提示信息
      MOV   AH,09H
      INT   21H 
      CALL  NUMBER                       ;输入要删除字符个数
      MOV   DX,OFFSET STR10              ;显示删除前字符串
      MOV   AH,09H
      INT   21H
      CALL  DISP
      MOV   CX,BX                         ;要删除的第一个字符和字符总数比较
      CMP   CX,COUNT                     
      JA    LOP3                          ;大于转  
      ADD   CX,B
      SUB   CX,1                          ;要删除字符个数与从第几个开始删的和
      CMP   CX,COUNT                      ;要删除字符多余字符总数转    
      JAE   LOP3
     
      SUB   DI,1                          
      MOV   SI,DI                         ;SI指向要删除的第一个字符的存储位置    
      ADD   DI,B                          ;DI指向要删除的最后一个字符的下一个存储位置
      MOV   CX,COUNT 
      SUB   CX,BX                         ;CX放要删除字符串后面的字符个数
      SUB   CX,B  
      ADD   CX,1  
 LOP2:MOV   DL,STR[DI]                    ;后边剩下的字符依次移到要删除的字符位置
      MOV   STR[SI],DL
      INC   DI
      INC   SI
      LOOP  LOP2
      MOV   DX,COUNT                      ;删除后字符个数                
      SUB   DX,B
      MOV   COUNT,DX
      JMP   LOP4
 LOP3:MOV   CX,BX                         ;要删除第一个字符前的字符个数给COUNT
      SUB   CX,1
      MOV   COUNT,CX
 LOP4:MOV   DX,OFFSET STR11               ;提示信息  
      MOV   AH,09H       
      INT   21H

      CALL  DISP                          ;显示删除后的字符串
      POP   DI
      POP   SI
      POP   DX
      POP   CX
      POP   BX
      POP   AX
      RET
ERASE ENDP
INSERT PROC NEAR
       PUSH  AX
       PUSH  BX
       PUSH  CX
       PUSH  DX
       PUSH  SI
       PUSH  DI
       MOV   DX,OFFSET STR6                 ;提示信息
       MOV   AH,09H
       INT   21H
       CALL  NUMBER                         ;输入从第几个字符开始插入
       MOV   BX,B
       MOV   DX,OFFSET STR7                 ;提示信息
       MOV   AH,09H
       INT   21H
       CALL  NUMBER                         ;输入要插入字符个数
       
       MOV   DL,0AH
       MOV   AH,02H
       INT   21H
       MOV   DL,0DH
       MOV   AH,02H
       INT   21H

       XOR   SI,SI
       MOV   CX,B
PUTIN: MOV   AH,01H                        ;输入要插入字符
       INT   21H
       MOV   CHARS[SI],AL
       INC   SI     
       LOOP  PUTIN
       MOV   DX,OFFSET STR12               ;显示插入前字符串
       MOV   AH,09H
       INT   21H
       CALL  DISP
       CMP   BX,COUNT                     ;要插入的第一个位置与字符总数比较大于转
       JA    LOP6
       MOV   DI,COUNT                     ;DI指向原字符串最后一个字符的位置
       SUB   DI,1
       MOV   SI,DI                        ;SI指向原字符串最后一个字符的位置   
       ADD   DI,B                         ;DI指向插入后字符串最后一个字符的位置
       MOV   CX,COUNT                     ;把要向后移动的字符个数放入CX
       SUB   CX,BX
       ADD   CX,1 
  LOP5:MOV   DL,STR[SI]                   ;依次移动字符
       MOV   STR[DI],DL
       DEC   SI
       DEC   DI
       LOOP  LOP5
       MOV   DI,BX                        ;DI指向要插入的第一个字符的位置
       SUB   DI,1
       JMP   LOP7
  LOP6:MOV   DI,COUNT                     ;DI指向原字符串最后一个字符的下一个位置
  LOP7:MOV   CX,B                         ;要插入字符个数放入CX     
       MOV   SI,0  
  LOP8:MOV   BL,CHARS[SI]                 ;插入字符
       MOV   STR[DI],BL
       INC   DI 
       INC   SI
       LOOP  LOP8              
       MOV   DX,COUNT                     ;插入后字符串的字符总数给COUNT
       ADD   DX,B
       MOV   COUNT,DX
       MOV   DL,0AH
       MOV   AH,02H
       INT   21H
       MOV   DL,0DH
       MOV   AH,02H
       INT   21H
       MOV   DX,OFFSET STR13              ;显示插入后字符串
       MOV   AH,09H
       INT   21H
       CALL  DISP
       POP   DI
       POP   SI
       POP   DX
       POP   CX
       POP   BX
       POP   AX
       RET
INSERT ENDP
QUIT   PROC  NEAR                          ;退出子程序
       PUSH  AX
       MOV   AH,4CH
       INT   21H 
       POP   AX
       RET
QUIT  ENDP
NUMBER PROC  NEAR                         ;数值转换子程序 完成从键盘输入10进制数
       PUSH  AX
       PUSH  BX
       PUSH  CX
       XOR   BX,BX
    S0:MOV   AH,01H
       INT   21H 
       CMP   AL,0DH
       JZ    S1
       SUB   AL,30H
       CBW 
       PUSH  AX
       MOV   CH,10
       MOV   AX,BX
       MUL   CH     
       MOV   BX,AX
       POP   AX
       ADD   BX,AX
       JMP   S0
    S1:MOV   B,BX
       MOV   AH,02H
       MOV   DL,0AH
       INT   21H 
       POP   CX
       POP   BX
       POP   AX
       RET
NUMBER ENDP
WRONG  PROC  NEAR                         ;错误提示子程序
       PUSH  DX
       MOV   DX,OFFSET STR14
       MOV   AH,09H
       INT   21H
       POP   DX
       RET
WRONG  ENDP
CODE ENDS
     END START
        
       


⌨️ 快捷键说明

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