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

📄 chazhao.asm

📁 查找匹配字符串汇编语言程序设计子程序设计
💻 ASM
字号:

data segment 
message1 db 'please input the sentance.',13,10,'$' 
message2 db 'please input the key word',13,10,'$' 
message3 db 'yes ,match',13,10,'$' 
message4 db 'oh! no match !',13,10,'$' 
seg1 db 50,?,50 dup(?) 
seg2 db 30,?,30 DUP(?) 
data ends 
code segment 
assume cs:code,ds:data,es:data 
start: 
mov ax,data 
mov ds,ax 
mov es,ax 

mov dx,offset message1 
mov ah,09h 
int 21h 
mov dx,offset seg1 
mov ah,0ah 
int 21h 

mov dx,offset message2 
mov ah,09h 
int 21h 
mov dx,offset seg2 
mov ah,0ah 
int 21h 


mov ax,offset seg1 
mov bx,offset seg2 
mov cx,[ax+1] ; 初步设定cx的外部循环的次数 
add ax,2 
mov si,ax;将si指向输入字符的头 
add bx,2 
push bx;保存这个指针,后面会用到 
mov di,bx;将di指向key的头 
cld ;比较方向为正 

L2: mov ax,cx ;保存外部的cx值 
mov cx,[bx-1] ;将key的长度给cx,来进行比较 
repe cmpsb ;字符比较 
jz L1 ;若比较完的时候发现相等zf=1,就表示匹配 
inc si; 要是每次比较完不相等zf=0,就将si下移 
pop di; 将di重新指向key的开始 
push di;并将di保存,瑕疵使用 
mov cx,ax ;将外部cx的值重新拿出来 
cmp cx,[bx-1] ;比较剩下的长度是否比key的还短 
jb L4 ;长度短于就直接输出不匹配 
loop L2 ;回去并重新开始 

L4: mov dx,offset message4 
mov ah,09h 
int 21h 
jmp L3 ;输出不匹配,并退出 

L1: mov dx,offset message3 
mov ah,09h 
int 21h ;输出匹配 
L3: mov ah,04ch 
int 21h 

code ends 
end start 









data   segment   
  substr   db   10   
          db   (?)   
          db   10   dup(?)   
  str   db   50   
          db   (?)   
          db   50   dup(?)   
  prompt1   db   'Enter   keyword:,   $'   
  prompt2   db   'Enter   sentence:,   $'   
  mess1   db   'Match!   13,10   ,$'   
  mess2   db   'No   Match!   ,13,10   ,$'   
  data   ends   
  code   segment   
  assume   cs:code,ds:data,es:data   
  main   proc   far   
  push   ds   
  sub   ax,ax   
  push   ax   
    
  mov   ax,data   
  mov   ds,ax   
  mov   es,ax   
    
  lea   dx,   prompt1   
  mov   ah,9   
  int   21h   
    
  lea   dx,   substr   
  mov   ah,10   
  int   21h   
  sub   ch,ch   
  mov   cl,substr+1   
    
    
  lea   dx,   prompt2   
  mov   ah,9   
  int   21h   
    
  lea   dx,   str   
  mov   ah,10   
  int   21h   
    
  add   dx,2   
  mov   bx,dx   
  loop1:   
  mov   di,bx   
  mov   si,offset   substr   
  add   si,2   
  repz   cmpsb   
  jz     display1   
  inc   bx   
  cmp   bx,offset   
  jz     display2   
  jmp   loop1   
  display1:   
  mov   dx,offset   mess1   
  mov   ah,9   
  int   21h   
    
  display2:   
  mov   dx,offset   mess2   
  mov   ah,9   
  int   21h   
    
  ret   
  main   endp   
  code   ends   
  end     main   

⌨️ 快捷键说明

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