题目是输入两个字符串,查找长字符串是否包含短字符串
刚刚接触和汇编语言,很菜,请大家指导啊,我写的代码如下,运行不起来啊
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