请编制程序PROC1.ASM,其功能是:内存中有一个ASCII字符串(从S0URCE开始存放),试将其中所有连续的回车与换行符(0DH,0AH)置换成单个回车符(0DH)。字符串以00H结尾,长度(包括00H)不超过100个字节。 例如:字符串41H

admin2009-02-15  21

问题 请编制程序PROC1.ASM,其功能是:内存中有一个ASCII字符串(从S0URCE开始存放),试将其中所有连续的回车与换行符(0DH,0AH)置换成单个回车符(0DH)。字符串以00H结尾,长度(包括00H)不超过100个字节。
   例如:字符串41H,42H,0DH,0AH,43H,00H
   转换为41H,42H,0DH,43H,00H
   部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUT- PUT1.DAT中。请编写BECIN到END之间的代码。对程序必须进行汇编,并与IO.OBJ连接产生PROC1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。
   部分源程序如下:
   EXTRN    LOAD:FAR,SAVE:FAR
            N     EQU     100

   STAC     SEGMENT   STACK
            DB    128 DUP   (?)
   STAC     ENDS   

   DATA     SEGMENT
   SOURCE   DB    N DUP    (0)
   RESULT   DB    N DUP    (0)
   NAME0    DB    ’INPUT1. DAT’,      0
   NAME1    DB    ’OUTPUT1. DAT’,     0
   DATA     ENDS   
   CODE     SEGMENT
            ASSUME  CS:CODE, DS:DATA, SS:STAC
   START    PROC    FAR
            PUSH    DS
            XOR     AX, AX
            PUSH    AX
            MOV     AX, DATA
            MOV     DS, AX
            LEA     DX, SOURCE ; 数据区起始地址
            LEA     SI, NAME0  ; 原始数据文件名
            MOV     CX,N       ; 字节数
            CALL    LOAD       ; 从"INPUT1.DAT"中读取数据

   **** BEGIN ****   

   ***** END *****   

            LEA     DX, RFSULT   ; 结果数据区首址
            LEA     SI, NAME1    ; 结果文件名
            MOV     CX,N         ; 结果字节数
            CALL    SAVE
            RET            

   START    ENDP      
   CODE     ENDS            
            END     START
   编程思路:
   第一步:分析程序要求的功能。
   本程序需要完成以下功能。
   (1)据文件INPUT1.DAT中读取100个ASCII码存放在SOURCE开始的内存单元中。
   (2)将SOURCE开始的100个字单元中的ASCII码,将0DH后的0AH删除,并将结果存放在RFSULT开始的内存单元中。
   (3)将结果存放在OUTPUT1.DAT中。
   第二步:用相应的汇编程序来实现其功能。
   (1) 数据的读取和存入文件部分的实现,题目中已经给出。
   (2) 如果是将数据在原地进行处理,那么每删除一个数据就要将其后面的所有数据向前移动一个位置,如果直接将扫描处理完毕的数据复制到结果地址中,将会节省移动数据的开销;
   因为要删除0DH后面的0AH,所以,在扫描数组的过程中除了要了解当前数据元素的内容还要了解前一个数据的内容。解决方法可使用标志单元记录前一个数据是否为 0DH,然后当前数据元素根据标志单元的内容决定当前元素是否复制到结果中;也可在扫描数组的过程中,如果碰到一个0DH,则进入不同的程序段,这个程序段决定是否将当前数据元素复制到结果中。我们的参考答案采用了后一种方法。

选项

答案LEA SI,SOURCE LEA DI,RESULT LO MOV AL,[SI] CMP AL,0 JZ QUIT ;如果当前字符为0,则结束 MOV [DI],AL ;不为0则复制到目的地址 INC SI INC DI CMP AL,0DH ;当前字符若为ODH,则进入L1状态 JE L1 JMP LO L1:MOV AH,[SI] ;在前一个字符为ODH的情况下,判断当前字符是符为OAH,若为OAH则不将OAH复制到目的地址 CMP AH,0AH JEN LO INC SI JMP LO ;重复处理下一个字符 QUIT

解析
转载请注明原文地址:https://kaotiyun.com/show/ljrZ777K
0

相关试题推荐
最新回复(0)