当前位置: 代码迷 >> 汇编语言 >> 汇编 查找字符串中的字符,并返回其出现的每个位置解决方法
  详细解决方案

汇编 查找字符串中的字符,并返回其出现的每个位置解决方法

热度:3721   发布时间:2013-02-26 00:00:00.0
汇编 查找字符串中的字符,并返回其出现的每个位置
我自己用串扫描只能实现查找首次出现的位置。
[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






------解决方案--------------------------------------------------------
请问你的问题或你想要的理想结果是什么?
  相关解决方案