题目要求
已知一任意长度字符串str,以00h结束,长度小于200h,编写汇编程序实现在该字符串中搜索匹配子串substr(以00h结束,长度小于80)。
若找到,则将found单元置为ffh,并将匹配位置(以字符串str首地址为0参考点)存放在pos单元中;否则,将found单元置为00h。要求编写完整程序,并上机调试能运行。(禁止使用串操作指令)
代码实现
data segment
str db '*bb*bbu*bbup*',00h
substr db 'bbupt',00h
found db 0
pos dw 0
data ends
code segment
assume cs:code,ds:data
start:
mov ax, data
mov ds, ax
lea si, str
lea di, substr ;指针指向首位字符
mov cx, 0000h ;cx:记录失败次数
compare:
mov dl, [di]
mov dh, [si]
cmp dh, dl ;字符比较
je success ;相等,跳转到成功
jne fail ;不相等,跳转到失败
success:
cmp byte ptr [di+1], 00h
je finish_success ;substr结束,跳转到匹配成功
inc si
inc di ;修改指针
jmp compare ;比较下一个字符
fail:
lea di, substr ;substr归原位,重新开始匹配
cmp byte ptr [si+1], 00h
je finish_fail ;str结束,跳转到匹配失败
inc cx ;记录失败次数
lea si, str ;si指针先归零
add si, cx ;从第(cx)位重新开始匹配
jmp compare ;比较下一个字符
finish_success:
mov al, 0ffh
mov found, al ;记录匹配成功
mov pos, cx ;记录匹配成功开始的位置
jmp endpart
finish_fail:
mov al, 00h
mov found, al ;记录匹配失败
jmp endpart
endpart:
int 3h
mov ah, 4ch
int 21h
code ends
end start
备注
完整思路流程与调试过程可参考我的资源《微机实验一完整报告》,若有错误,还请指出~