问题 问答题

请编制程序,其功能是:内存中连续存放着20个十进制数字的ASCⅡ字符,把它们转换成10个字节的压缩型(组合型) BCD码。
例如:
内存中有:31H(’1’),32H(’2’),33H(’3’),34H(’4’)…(共20个字节)
结果为: 21H,43H,…(共10个字节)
部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
请填空BEGIN和END之间已给出的源程序使其完整,空白处已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
对程序必须进行汇编,并与IO.OBJ连接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序存在错误之处,请加以修改。
【试题程序】
EXTRN LOAD:FAR, SAVE:FAR
NEQU 10
STAC SEGMENT STACK
DB128 DUP ()
STAC ENDS
DATA SEGMENT
SOURCE DBN*2 DUP()
RESULT DBN 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*2 ; 字节数
CALL LOAD; 从"INPUT1.DAT"中读取数据
; ******* BEGIN ********
LEA SI,SOURCE
LEA DI,RESULT
MOV CX,N
NEXT: MOV (1) ,[SI]
(2)
AND AL, (3)
MOV BL,AL
(4)
ADD SI,2
PUSH (5)
MOV CL, (6)
SAL AL,CL
POP (7)
ADD AL, (8)
MOV (9) ,AL
(10)
LOOP NEXT
; ******** END ********
LEA DX,RESULT ; 结果数据区首址
LEA SI,NAME1 ; 结果文件名
CALL SAVE; 保存结果到文件
RET
START ENDP
CODE ENDS
END START

答案

参考答案:

AX (B) MOV BH,AH (C) 0FH (D) MOV AL (E) CX

(F) D (G) CX (H) BL (I) [DI] (A0) INC DI

解析:

本题主要考查怎样将数字的ASCⅡ字符进行压缩成BCD码。题目中所提供的程序是每次读取两个数字字符至AX,分别对这两个字符进行处理,AL取低4位并存入BL中,AH左移4位,与此同时正好把高4位去掉并存入AL中,最后将AL和 BL加在一起并存,放到结果数据区。

单项选择题
单项选择题