作者在 2021-11-24 19:05:11 发布以下内容
DATAS SEGMENT
;此处输入数据段代码
input1 db "please input a string:$"
buf db 200
db ?
db 200 dup(?)
input2 db 0ah,0dh,'$'
same db 'Yes','$'
nsame db 'No','$'
DATAS ENDS
ext segment ;masm
string db 'masm$'
ext ends
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov ax,ext
mov es,ax
lea dx,input1 ;输出提示
mov ah,09h
int 21h
lea dx,input2
mov ah,09h
int 21h
mov ah,0ah ;输入字符串
lea dx,buf
int 21h
lea dx,input2 ;换行
mov ah,09h
int 21h
cld;方向标志位清零
mov al,0
mov bx,0 ;bX存放输入字符串已经搜索过的字符个数
lea si,buf+2 ;si放置实际输入字符串首地址
mov cl,buf+1 ;cl中放置实际输入字符串长度
lea dx,same ;将‘yes’送入dx
L0:
lea di,string ;di中放masm 的第一个字符偏移地址
L3: mov al,[si]
scasb ;将第二个字符串中的字符与第一个字符串中的一个字符进行比较
jz next
mov bh,0
call mbingo
inc si ;指向输入字符串的下一个字符 如果错的字是m要另外算
L5: inc bl ;记下输入字符串已经被搜索的字符
cmp cl,bl
jnz L0 ;bx!=字符数量,输入字符下一字符与masm中字符比较;bx=4,输出no
lea dx,nsame ;输出no
mov ah,09h
INT 21H
jmp L1 ;结束
next:
inc bh ;记下对的字符数量
cmp bh,4 ;判断是否已经满足4个也就是masm
jge L2 ;如果
inc si
jmp L3
mbingo proc ;如果第一个不符合条件的是字符m
cmp al,'m'
je L5 ;直接跳过inc si ;si依旧指向m
ret
mbingo endp
L2:
mov ah,09h
INT 21H
L1:
mov ah,1
int 21h
MOV AH,4CH
INT 21H
CODES ENDS
END START