读书人

汇编 查找字符串中的字符,并返回其出现

发布时间: 2012-04-09 13:41:24 作者: rapoo

汇编 查找字符串中的字符,并返回其出现的每个位置
我自己用串扫描只能实现查找首次出现的位置。
[code=Assembly][/code]DATAS SEGMENT
string db 'abcdefghijklmnopqrstuvwxyz0123456789$'
len equ $-string
inch db ?
s1 db 'Welcom to this find program! '
db'Please input a char or enter space to quit:',13,10,'$'
mess1 db 13,10,'Sorry I can',27h,'t find it!',13,10,'$'
mess2 db 13,10,'Good luck,You find it!',13,10,'$'
huiche db 13,10,'$'
is1 db 13,10,'The char is on: ','$'
is2 db ' -th position!',13,10,'$'
ag db 13,10,'Again input! Space to quit!',13,10,'$'
DATAS ENDS
;*******************************************************************
CODES SEGMENT ;版本1,查找指定字符在字符串中首次出现的位置
main proc far
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
mov es,ax
lea dx,s1;显示欢迎信息
mov ah,9
int 21h
again:
call input;调用输入字符功能
call find;调用查找程序
jmp again;循环
over:
mov ax,4ch
int 21h
main endp
;+++++++++++++++++++++++++++++++++++++++++++++++
input proc near
mov ah,01;输入要查找的字符
int 21h
;---------------------------------------------
cmp al,' ' ;判断退出条件是否为空格
je over
ret
input endp
;++++++++++++++++++++++++++++++++++++++++++++++++
find proc near
cld ;准备开始串扫描
mov di,offset string
mov cx,len
repnz scasb
jz zhaodao
lea dx,mess1;未找到
mov ah,9
int 21h
jmp exit
zhaodao:
lea dx,mess2
mov ah,9
int 21h;找到
lea dx,is1
mov ah,9
int 21h
sub di,offset string;取得位置
call output;输出
lea dx,is2
mov ah,9
int 21h
exit:;提示并等待下一次输入
lea dx,ag
mov ah,9
int 21h
ret
find endp
;++++++++++++++++++++++++++++++++++++++++++++++++++
output proc near
mov ax,di
cmp ax,10d
jae liangwei
jmp yiwei
liangwei:
mov cx,10d
call divv
yiwei:
mov cx,1
call divv
ret
output endp
;++++++++++++++++++++++++++++++++++++++++++++++++++
divv proc near
div cl
mov dl,al
mov bh,ah
add dl,30h
mov ah,2
int 21h
mov al,bh
mov ah,0
ret
divv endp
CODES ENDS
END START






[解决办法]
请问你的问题或你想要的理想结果是什么?

读书人网 >汇编语言

热点推荐