我自己用串扫描只能实现查找首次出现的位置。
[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
------解决方案--------------------------------------------------------
请问你的问题或你想要的理想结果是什么?