请编制程序PROG1.ASM,其功能是:以SOURCE开始的内存区域存放着多个字节的数据,其中有压缩BCD码和其他数据。现按下列编码规则进行编码:在每个压缩BCD码前面加两个字节前缀代码BEH和CCH,并在其后加两个字节后缀代码DDH和EDH;如果不是压缩

admin2009-02-15  38

问题 请编制程序PROG1.ASM,其功能是:以SOURCE开始的内存区域存放着多个字节的数据,其中有压缩BCD码和其他数据。现按下列编码规则进行编码:在每个压缩BCD码前面加两个字节前缀代码BEH和CCH,并在其后加两个字节后缀代码DDH和EDH;如果不是压缩BCD码,则该数据前后均加两个代码0DH和0EH。编码后的数据存放到RESULT指示的内存区域。
   例如:
   原信息为:12H,D9H,86H,54H,……
   结果为:BEH,CCH,12H,DDH,EDH,0DH,0EH,D9H,0DH,0EH,BEH,CCH,86H,DDH,EDH,BEH, CCH,86H,DDH,EDH,……
   部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件 OUTPUT1.DAT中。
   填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
   对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处,请加以修改。
   试题程序:
               EXTRN     LOAD:FAR, SAVE:FAR
   N           EQU       10
   STAC        SEGMENT STACK
               DB        128 DUP (?)
   STAC        ENDS
   DATA        SEGMENT
   SOURCE      DB        N DUP(0)
   RESULT      DB        5*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
               MOV        ES,AX         ; 置附加段寄存器
               LEA        DX,SOURCE     ; 数据区起始地址
               LEA        SI,NAME0      ; 原始数据文件名
               MOV        CX,N          ; 字节数
               CALL       LOAD          ; 从INPUT1.DAT中读取数据
   ;**** BEGIN ****
               LEA        SI, SOURCE
               MOV        DI,OFFSET RESULT
               MOV        CX,N
   CLP1:       MOV        AL, [SI]
               MOV        BL,AL
               MOV        AH,AL
                 (1)   
               AND        AL,0FOH
                 (2)   
               MOV        CL,4
                 (3)     
               POP        CX
               CMP          (4)   
               JA         CLP2
               CMP        AH,9
               JA         CLP2
               MOV          (5)     
               INC        DI
               MOV        BYTE PTR[DI],0CCH
               INC        DI
               MOV        BYTE PTR[DI],BL
               INC        DI
               MOV        BYTE PTR[DI],0DDH
               INC        DI
               MOV        BYTE PTR[DI],0EDH
               JMP        CLP3
   CLP2:       MOV        BYTE PTR[DI],0DH
               INC        DI
               MOV        BYTE PTR[DI],0EH
               INC        DI
               MOV        BYTE PTR[DI],BL
               INC        DI
               MOV        BYTE PTR[DI],0DH
               INC        DI
               MOV        BYTE PTR[DI],0EH
   CLP3:       INC        SI
               INC        DI
                 (6)     
   ; **** END ****
               LEA       DX,RESULT     ; 结果数据区首址
               LEA       SI,NAME1      ; 结果文件名起始地址
               MOV       CX,5*N        ; 字节数
               CALL      SAVE          ; 保存结果到OUTPUT1.DAT
   RET
   START       ENDP
   CODE        ENDS
               END      START

选项

答案(1)AND AH,OFH (2) PUSH CX (3) RORAL,CL(4) AL,9 (5) BYTE PTR [DI],0BEH (6) LOOP CLP1

解析 识别是否为压缩BCD码,若是,则利用堆栈的性质,在前面加BEH和CCH,在其后加DDH和EDH;若不是,则该数据前后均加0DH和0EH。最后编码后的数据存放到RESULT指示的内存区域。
转载请注明原文地址:https://kaotiyun.com/show/1yrZ777K
0

最新回复(0)