|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
判断STR2是不是STR1的子串
datasg segment
STR1 db 32, ?, 32 dup (?)
STR2 db 16, ?, 16 dup (?)
INFO1 db 'Input Long Str:$'
INFO2 db 'Input Short Str:$'
INFO3 db 'yes$'
INFO4 db 'no$'
INFO5 db 'error$'
INDEX dw 2
datasg ends
;==============================================================================================================
codesg segment
assume cs:codesg, ds:datasg
start: mov ax, seg STR1
mov ds, ax
mov dx, offset INFO1 ;显示提示信息1
mov ah, 9
int 21h
mov dx, offset STR1
call GetStr ;输入长字符串
call NewLine ;换行
mov dx, offset INFO2 ;显示提示信息2
mov ah, 9
int 21h
mov dx, offset STR2
call GetStr ;输入短字符串
call NewLine ;换行
;取2个字符串长度(cl) = 长字符串长度, (dl) = 短字符串长度
mov bh, STR1 + 1 ;取得长字符串长度
mov bl, STR2 + 1 ;取得短字符串长度
;合法验证
mov dx, offset INFO5 ;初始化为错误提示
or bh, bh
jz ok1
or bl, bl
jz ok1
cmp bl, bh
ja ok1
mov ah, 0 ;初始化为no状态
mov si, 1
xor ch, ch
bj_next1: cmp bh, bl
jb bj_next3
dec bh
mov di, si
inc si
mov INDEX, 1
mov cl, bl
bj_next2: inc di
inc INDEX
push si
mov si, INDEX
mov al, STR2[si]
pop si
cmp al, STR1[di]
jnz bj_next1
loop bj_next2
mov ah, 1
bj_next3: mov dx, offset INFO4
or ah, ah
jz ok1
mov dx, offset INFO3
ok1: mov ah, 9
int 21h
ok: xor al, al
mov ah, 4ch
int 21h
;名称:GetStr
;功能:接收字符串
;入口参数:(dx) = 缓冲区首地址
;出口参数:无
GetStr proc near
push ax
mov ah, 0ah
int 21h
pop ax
ret
GetStr endp
;名称:NewLine
;功能:换行
;入口参数:无
;出口参数:无
NewLine proc near
push ax
push dx
mov ah, 2
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
pop dx
pop ax
ret
NewLine endp
codesg ends
;==============================================================================================================
end start
|
|