请编制程序PROG1.ASM,其功能是:以SOURCE开始的内存区域存放着N个字节的压缩BCD码,将每个压缩BCD码转换成两个ASCII码,并在最高位增加偶校验位,结果存放到RESULT指示的内存区域内。 例如: 原压缩BCD码:26H,75H

admin2009-02-15  24

问题 请编制程序PROG1.ASM,其功能是:以SOURCE开始的内存区域存放着N个字节的压缩BCD码,将每个压缩BCD码转换成两个ASCII码,并在最高位增加偶校验位,结果存放到RESULT指示的内存区域内。
   例如:
   原压缩BCD码:26H,75H,91H,33H,……
   结果为:B2H,36H,B7H,35H,39H,B1H,33H,33H,……
   部分程序已给出,其中原始数据由过程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        2*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
   SERCHI:    MOV        (1)  
              MOV       AH,AL
              AND       AH,0FH
              AND       AL,0FOH
              PUSH      CX
              MOV       CL,4
               (2)  
               (3)  
              ADD       AL,30H
               (4)  
              OR        AL,80H
   SERCH2:    MOV       [DI],AL
              INC       DI
               (5)  
              JP        SERCH3
              OR        AH,80H
   SERCH3:    MOV       [DI],AH
              INC       DI
              INC       SI
               (6)       SERCH1
   ; **** END ****
              LEA       DX,RESULT     ; 结果数据区首址
              LEA       SI,NAME1      ; 结果文件名起始地址
              MOV       CX,2*N        ; 字节数
              CALL      SAVE          ; 保存结果到OUTPUT1.DAT文件中
   RET
   START      ENDP
   CODE       ENDS
              END       START

选项

答案(1)AL, [SI] (2) ROR AL, CL (3) POP CX(4) JP SERCH2 (5) ADD AH, 30H (6) LOOP

解析 本题要完成两个任务首先将压缩BCD码转换成两个ASCII码,然后在最高位增加偶校验位,结果存放到RESULT指示的内存区域。将BCD码转换成ASCII码是ASCII码转换 BCD码的逆过程。试寄存器中“1”的个数的奇偶性:将被测试寄存器进行不改变其内容的逻辑运算,然后查看一个奇偶标志位(PF)即可。
转载请注明原文地址:https://kaotiyun.com/show/rwrZ777K
0

最新回复(0)