|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
有点长要求1、 从键盘输入两个字符串:A串,例如’software’;B串,例如’school of software engineering’;
2、 判断A在B中是否存在,如果存在,输出“FOUND”,反之,输出“NOT FOUND”;
3、 (确定一个B串中多处存在A串的例子),用一个C串去替换A串(A与C长度不一样,取代所有相同的串),替换后的结果在显示器上显示。
实现了前两个功能,差第三个。我想问缓冲区最多可以定义几个?只有di和si可以指向缓冲区吗??
第三个给个思路
DATA SEGMENT
BUFFERA DB 32 ;两段缓冲区,为什么是32???
DB 0
DB 32 DUP(0)
BUFFERB DB 32
DB 0
DB 32 DUP(0)
BUFFERC DB 32
DB 0
DB 32 DUP(0)
BUFFERD DB 32
DB 0
DB 32 DUP(0)
PROMPTSTRINGA DB 'input A string:',0AH,0DH,'$' ;输出语句
PROMPTSTRINGB DB 'input B string:',0AH,0DH,'$'
PROMPTSTRINGC DB 'input C string TO replace A :',0AH,0DH,'$'
PROMPTSTRINGENTER DB 0AH,0DH,'$' ;回车换行结束?
FOUNDSTRING DB 'FOUND IT',0AH,0DH,'$'
NOTFOUNDSTRING DB 'NOT FOUND IT',0AH,0DH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
;input A B string
MOV DX,DATA
MOV DS,DX
MOV DX,OFFSET PROMPTSTRINGA ;
MOV AH,09H ;功能号代表字符串输出
INT 21H ;dos功能调用in 21h
MOV DX,SEG BUFFERA ;字符串输入,获得段地址
MOV DS,DX
MOV DX,OFFSET BUFFERA
MOV AH,0AH
INT 21H
MOV DX,OFFSET PROMPTSTRINGENTER
MOV AH,09H
INT 21H
MOV DX,OFFSET PROMPTSTRINGB
MOV AH,09H
INT 21H
MOV DX,SEG BUFFERB
MOV ES,DX
MOV DX,OFFSET BUFFERB
MOV AH,0AH
INT 21H
MOV DX,OFFSET PROMPTSTRINGENTER
MOV AH,09H
INT 21H
MOV DX,OFFSET PROMPTSTRINGENTER
MOV AH,09H
INT 21H
MOV DX,OFFSET PROMPTSTRINGC
MOV AH,09H
INT 21H
MOV DX,SEG BUFFERC
MOV ES,DX
MOV DX,OFFSET BUFFERC
MOV AH,0AH
INT 21H
MOV DX,OFFSET PROMPTSTRINGENTER
MOV AH,09H
INT 21H
MOV DX,SEG BUFFERD
;look for if A in B
MOV SI,OFFSET BUFFERA ;获得字符串A的偏移地址
MOV DI,OFFSET BUFFERB
ADD SI,02H ;指向
ADD DI,01H ;the same
PUSH SI ;干嘛push啊??
PUSH DI
MOV BX,ES:[DI] ; 字符串B长度
MOV BH,00H ;干嘛的?因为是输的是字节?
MOV CX,DS:[SI-01H] ;为什么-1? 第2字节将存放实际输入抵符个数
MOV CH,00H
PUSH CX ;A的长度? 第二层循环次数
AGAIN:
POP CX ; 循环开始了????
POP DI
INC DI ;
POP SI
PUSH SI ;
PUSH DI
PUSH CX
REPZ CMPSB ;字符串比较
JZ FOUND ;判断是否结束
SUB BL,01H ;B-1后的长度
JZ NOTFOUND ;
JMP AGAIN
FOUND: MOV DX,OFFSET FOUNDSTRING
MOV AH,09H
INT 21H
JMP ENDPRO
NOTFOUND: MOV DX,OFFSET NOTFOUNDSTRING
MOV AH,09H
INT 21H
;USE C TO REPLACE A
ENDPRO: MOV AX,4C00H
INT 21H
CODE ENDS
END START |
|