要求是在str1串中寻找字符‘A’,若找到则删除,若找不到,则显示find fail,用串操作完成,并能循环输入
我写的程序如下,但是什么不输入的时候他显示:
2
输入2的时候显示:
find fail
输入12345A678能显示正确结果
输入123A的时候却显示:
2♦123
输入123456A789时显示:
2
123456 789
谁能提供一下修改意见,把程序改好
程序如下:
DATAS SEGMENT USE16
BUF1 DB 'PLEASE INPUT A STRING:$ '
BUF2 DB 'FIND FAIL$ '
BUF3 DB 0AH,0DH, '$ '
BUF4 DB 'PRESS C TO CONTINUE, PRESS ANYOTHER KEY TO BACK(C/?):$ '
STR1 DB 50
DB ?
DB 50 DUP(0)
DATAS ENDS
STACKS SEGMENT USE16 STACK
DB 200 DUP(0)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
INOUT MACRO BUF,N
LEA DX,BUF
MOV AH,N
INT 21H
ENDM
P: INOUT BUF3,9
INOUT BUF1,9
INOUT STR1,10
MOV BL,STR1+1
MOV BH,0
MOV BYTE PTR STR1+2[BX], '$ '
INOUT BUF3,9
MOV CL,STR1+1
XOR CH,CH
LEA DI,STR1+2
MOV AL, 'A '
XOR BX,BX
Q: REPNE SCASB
JE A
JMP OUT1
A: MOV BYTE PTR [DI]-1,0
MOV BX,1
CMP CX,0
JNE Q
OUT1:
CMP BX,0
JE M
INOUT STR1,9
JMP OUT2
M: INOUT BUF2,9
OUT2:
INOUT BUF3,9
INOUT BUF4,9
MOV AH,1
INT 21H
CMP AL, 'C '
JE P
MOV AH,4CH
INT 21H
CODES ENDS
END START
------解决方案--------------------------------------------------------
宏应该写在程序的开头
------解决方案--------------------------------------------------------
为了让大家方便的阅读和改进源代码,我给源代码加上了少许的注释。
INOUT MACRO BUF,N ;显示字符串和获取字符串,N是子功能号,BUF是缓冲区
LEA DX,BUF
MOV AH,N
INT 21H
ENDM
DATAS SEGMENT USE16
BUF1 DB 'PLEASE INPUT A STRING:$ '
BUF2 DB 'FIND FAIL$ '
BUF3 DB 0AH,0DH, '$ '
BUF4 DB 'PRESS C TO CONTINUE, PRESS ANYOTHER KEY TO BACK(C/?):$ '
STR1 DB 50
DB ?
DB 50 DUP(0)
DATAS ENDS
STACKS SEGMENT USE16 STACK
DB 200 DUP(0)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX