当前位置: 代码迷 >> 汇编语言 >> 60行的小程序改错,该如何处理
  详细解决方案

60行的小程序改错,该如何处理

热度:10149   发布时间:2013-02-26 00:00:00.0
60行的小程序改错
要求是在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
  相关解决方案