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

📄 查找匹配字符串.asm

📁 这是查找匹配字符串的
💻 ASM
字号:
DATAS SEGMENT
    ;此处输入数据段代码 
    SHOWKEY DB 'ENTER KEYWORD:','$'
    SHOWSENTENCE DB 'ENTER SENTENCE:','$'
    ;
    
  ;   
    INKEY LABEL BYTE 
    MAX1 DB 10
    ACT1 DB ?
    KEYWORD DB 10 DUP(?)
    
    INSENTENCE  LABEL  BYTE
    MAX2 DB 30
    ACT2 DB ?
   SENTENCE DB 30 DUP(?)
    MESS1 DB 'NO MATCH','$'
    MESS2 DB 'MATCH','$'
   
    
    
    COUNTKEYWORD DB ?
    COUNTSENTENCE DB ?
    
    JUDGE DB 0 
    SHOWLOCATION DB 'LOCATION:','$'
    
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
	MAIN PROC FAR
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV ES,AX
    ;此处输入代码段代码
    XOR AX,AX
    PUSH AX
    PUSH DS
    
    LEA DX,SHOWKEY  ; PLEASE INPUT THE KEY
    MOV AH,09H
    INT 21H
    
   
    
    
    
    LEA DX,INKEY    ; INPUT THE KEY 
    MOV AH,0AH
    INT 21H
    
    
   
    
    mov DX,0AH      ; ENTER 
    MOV AH,02H
    INT 21H
    
    
    
     
  MOV CH,0
  
  MOV CL,ACT1    ; SET CL KEY  COUNT 
  MOV COUNTKEYWORD,CL
  
  LOOP1: 
  MOV JUDGE,0;设置标志位用来判断是否已经找到
  LEA DX,SHOWSENTENCE;输入句子
  MOV AH,09H
  INT 21H

   
  LEA DX,INSENTENCE;在句子缓冲区中输入句子
  MOV AH,0AH
  INT 21H
  
 
  MOV  DL,0AH;回车
  MOV AH,02H
  INT 21H

  
  CMP ACT2,0;判断输入的句子是否为空,若为则退出
  JZ EXIT
  
  MOV CL,ACT2;将句子的字符个数放入countsentence 一个内存单元中
  MOV COUNTSENTENCE,CL
  MOV CH,0
 
  SUB CL,COUNTKEYWORD;设置比较次数 句子长度-关键子长度+1
  ADD CL,1
  CMP CX,1
  JB UNFIND;若次数小于1则退出   
  
  LEA SI,KEYWORD;设置串比较的初始条件
  LEA DI,SENTENCE
  
  
  LOOP2: PUSH CX;先保存总的比较次数   
  MOV CL,COUNTKEYWORD
  MOV CH,0;cx也作为串比较的循环次数
  ;ADD CL,1; ADD 1
  ;经过测试不加1也对
  MOV BX,DI;
  CLD
  REPZ CMPSB
  CMP Cx,0;因为判断条件设置为CX是否为0?所以串比较次数应该多1,应该判断JZ
  JNZ UNSUCCEED;若没查到就转向
  JMP SUCCEED;找到转向
  
  UNSUCCEED: 
  ;不管找到找不到都要转向此处继续查找其他的字符
  
  
  
  
    LEA SI,KEYWORD
    POP CX ;将外循环比较次数取出
    LOOP LOOP2;重复比较
    CMP JUDGE,1;若已经找到则还将继续查找其余的匹配串
    JZ LOOP1;
    
   UNFIND: LEA DX,MESS1
    MOV AH,09H
    INT 21H
    
    ;;;;
    MOV DL,0AH;换行
    MOV AH,02H
    INT 21H
    ;;;;;;;;;;;;
    JMP LOOP1;没找到则继续要求用户输入查找的句子
    
    SUCCEED:
    LEA DX,MESS2
    MOV AH,09H
    INT 21H
    MOV JUDGE,1
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
    ; 若成功则转向16进制转换程序 
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    
    
    LEA DX,SHOWLOCATION
    MOV AH,09H
    INT 21H
    
    
    
    SUB BX,OFFSET SENTENCE;计算字符的位置
    ADD BX,1
    MOV DH,BL
    MOV CX,2
    LOOPP: ;位置转换成16进制
    ROL Dh,1
    ROL DH,1
    ROL DH,1
    
    
    
    
    MOV BH,DH
    AND BH,0FH
    ADD BH,30H
    CMP BH,39H
    JBE LOP
    ADD BH,07H
    LOP:MOV DL,BH
    MOV AH,02H
    INT 21H
    LOOP LOOPP
    
    
 ;
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    JMP UNSUCCEED
    EXIT: MAIN ENDP
    
    
  
  
  
  
 
    
    
     
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

⌨️ 快捷键说明

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