📄 si.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 dx,[ax+1] ; 初步设定cx的外部循环的次数
add ax,2
mov si,ax;将si指向输入字符的头
add bx,2
push bx;保存这个指针,后面会用到
mov di,bx;将di指向key的头
cld ;比较方向为正
L2: mov ax,dx ;保存外部的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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -