编制一个程序,其实现的功能为:将内存中从SOURCE开始的区域里存放的20个字节的压缩BCD码转换为ASC

16 查阅

编制一个程序,其实现的功能为:将内存中从SOURCE开始的区域里存放的20个字节的压缩BCD码转换为ASCⅡ码,每个压缩的BCD码转换为两个ASCⅡ码,并在最高位加上奇校验位,结果存放到RESULT开始的内存区域。

例如:

内存中有:73H,45H……

则结果为:37H,B3H,34H,B5H……

部分程序已经给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入以SOURCE开始的内存单元中。运算结果要求从RESULT开始的内存单元存放,由过程SAVE保存到文件OUTPUT.DAT中。

请填空BEGIN和END之间已给出的源程序使其完整,空白已经用横线标出,每行空白一般只需要一条指令,但采用功能相当的多条指令也行,考生也可以删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。

对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。

【试题程序】

EXTRN LOAD:FAR,SAVE:FAR

N EQU 20

DSEG SEGMENT

SOURCE DB N DUP(?)

RESULT DB N*2 DUP(0)

NAME0 DB 'INPUT.DAT',0

NAME1 DB 'OUTPUT.DAT',0

DSEG ENDS

SSEG SEGMENT STACK

DB 256 DUP(?) SSEG ENDS CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG,SS:SSEG START PROC FAR

PUSH DS

XOR AX,AX

PUSH AX

MOV AX,DSEG

MOV DS,AX

LEA DX,SOURCE

LEA SI,NAME0

MOV CX,N

CALL LOAD

; ******** BEGIN ********

LEA SI,SOURCE

LEA DI,RESULT

MOV CX,N

AGAIN: MOV AL,[SI]

MOV AH,AL

(1)

AND AH,0FOH

(2)

MOV CL,4

(3)

POP CX

ADD AL,30H

(4) NEXT

OR AL,80H

NEXT: MOV [DI],AL

INC DI

ADD AH,30H

(5) NEXT1

OR AH,80H

NEXT1: MOV [DI],AH

INC DI

INC SI

LOOP AGAIN

; ******** END ********

LEA DX,RESULT

LEA SI,NAME1

MOV CX,N*2

CALL SAVE

RET

START ENDP

CSEG ENDS

END START

参考答案:

(1) ANDAL0FH (2) PUSH CX(3) SHRAH CL (4) JNP (5) JNP(1) ANDAL,0FH (2) PUSH CX(3) SHRAH, CL (4) JNP (5) JNP 解析:题目要求将压缩的BCD码转换为两个ASCⅡ码,则首先要将BCD码分离出来,转换为非压缩的BCD码,然后转换为 ASCⅡ码。最高位要求加奇校验位,所以要对转换以后的数据进行判断,如果数据中1的个数为奇数的话,则直接将其存储到结果存储区,否则要将数据的最高位变为1。 程序中

计算机三级