当前位置: 代码迷 >> 汇编语言 >> 汇编语言关于查找字符串中的小疑点
  详细解决方案

汇编语言关于查找字符串中的小疑点

热度:3944   发布时间:2013-02-26 00:00:00.0
汇编语言关于查找字符串中的小问题
题目是输入两个字符串,查找长字符串是否包含短字符串

刚刚接触和汇编语言,很菜,请大家指导啊,我写的代码如下,运行不起来啊

 
  ASSUME CS:CODE,DS:DATA,SS:STA
  DATA SEGMENT
  BUFFERA DB 16
  DB 0
  DB 16 DUP(0)
  BUFFERB DB 16
  DB 0
  DB 16 DUP(0) ;申请缓存区
  INASTRING DB 'input long word:',0DH,0AH,'$' ;定义输入提示的字符串
  INBSTRING DB 'input short word:',0DH,0AH,'$';定义输入提示的字符串
 ENTERSTRING DB 0DH,0AH,'$'
 FOUNDSTRING DB 'find stringb in stringa',0DH,0AH,'$'
  NOTFOUNDSTRING DB 'do not find stringb in srtinga',0DH,0AH,'$'
  DATA ENDS

  STA SEGMENT
  DB 16 DUP(0);定义一个栈,来进行暂时保存数据工作
  STA ENDS

  CODE SEGMENT

  START:

  MOV AX,STA
  MOV SS,AX
  MOV SP,16

  MOV AH,09H
  MOV DX,OFFSET INASTRING
  INT 21

  MOV DX,SEG BUFFERA
  MOV DS,DX
  MOV DX,OFFSET BUFFERA
  MOV AH,0AH
  INT 21 ;输入字符串

  MOV AH,09H
  MOV DX,OFFSET ENTERSTRING
  INT 21

  MOV AH,09H
  MOV DX,OFFSET INBSTRING
  INT 21

  MOV DX,SEG BUFFERB
  MOV ES,DX
  MOV DX,OFFSET BUFFERB
  MOV AH,0AH
  INT 21 ;输入字符串

  MOV AH,09H
  MOV DX,OFFSET ENTERSTRING
  INT 21 ; 以上显示输入输出



  MOV DI,OFFSET BUFFERA ; 获取ab中第一个字母的位置
  ADD DI,02H
  MOV SI,OFFSET BUFFERB
  ADD SI,02H

  MOV AL,ES:[SI] ; 将与b的第一个字母相同的a中字母位置放在栈中
  MOV CX,DS:[DI-1]
  S0:
  REPNZ SCASB ;将在a中查询到的与b首字母相同的字幕位置放在栈中
  PUSH DI
  LOOP S0


  MOV BX,ES:[SI-1] ; 将b长度放在bx中
  AND BH,00H

  MOV AX,16 ;根据栈的指针的变化,求出a中与b首字母相同的字母个数,存放在cx中,作为循环次数
  SUB AX,SP
  MOV CL,2
  DIV CL
  AND AH,00H
  MOV CX,AX
  S1:
  POP DI
  PUSH CX
  PUSH SI
  MOV CX,BX
  REPZ CMPSB
  JCXZ FOUND
  POP SI
  POP CX
  LOOP S1

  FOUND:
  MOV AH,09H
  MOV DX,OFFSET FOUNDSTRING
  INT 21

  NOTFOUND:
  MOV AH,09H
  MOV DX,OFFSET NOTFOUNDSTRING
  INT 21

  MOV AX,4C00H
  INT 21H

  CODE ENDS
  相关解决方案