
大家帮我看看这个汇编程序那个地方错了啊?
实现:匹配源串(si)‘howareyou?’中的子串(di)'are'字符串。用si存储源串,di存储子串。.modelsmall.stack.datasourcedb...
实现:匹配源串(si)‘how are you?’中的子串(di)'are'字符串。用si存储源串,di存储子串。
.model small
.stack
.data
source db 'How are you?'
source_len equ $-source;源串长度
target db 'are'
target_len equ $-target;子串长度
success db 'success$'
error db 'error$'
.code
.startup
mov ax,@data
mov ds,ax
mov ax,@data
mov es,ax;一定要初始化es!!!!
lea si,source
lea di,target
mov bx,source_len-target_len+1 ;设置循环的次数
push di ;把di压栈保存,因为每次比较都从子串的第一个字符开始比较
cld ;正向进行比较
compare:mov cx,target_len ;设置比较的次数
push si ;把si压栈保存,防止si改变
repz cmpsb ;循环比较
je show ;若要跳转,则比较的结果为0,既是ZF=1时才执行跳转于show中输出匹配成功的标志
pop si ;若匹配不成功,则恢复si的值
inc si ;使si指向原串的下一个字符
pop di ;恢复di
dec bx ;循环次数减1
jne compare ;当bx!=0的时候,继续循环
mov dx,offset error ;如果循环完成之后仍然没有找到,则输出错误信息
mov ah,9
int 21h
jmp final
show:mov dx,offset success ;输出正确的信息
mov ah,9
int 21h
final:.exit 0
end
为什么我用debug调试的时候si没有指向source呢?
为什么结果总是error? 展开
.model small
.stack
.data
source db 'How are you?'
source_len equ $-source;源串长度
target db 'are'
target_len equ $-target;子串长度
success db 'success$'
error db 'error$'
.code
.startup
mov ax,@data
mov ds,ax
mov ax,@data
mov es,ax;一定要初始化es!!!!
lea si,source
lea di,target
mov bx,source_len-target_len+1 ;设置循环的次数
push di ;把di压栈保存,因为每次比较都从子串的第一个字符开始比较
cld ;正向进行比较
compare:mov cx,target_len ;设置比较的次数
push si ;把si压栈保存,防止si改变
repz cmpsb ;循环比较
je show ;若要跳转,则比较的结果为0,既是ZF=1时才执行跳转于show中输出匹配成功的标志
pop si ;若匹配不成功,则恢复si的值
inc si ;使si指向原串的下一个字符
pop di ;恢复di
dec bx ;循环次数减1
jne compare ;当bx!=0的时候,继续循环
mov dx,offset error ;如果循环完成之后仍然没有找到,则输出错误信息
mov ah,9
int 21h
jmp final
show:mov dx,offset success ;输出正确的信息
mov ah,9
int 21h
final:.exit 0
end
为什么我用debug调试的时候si没有指向source呢?
为什么结果总是error? 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询