1、三级 PC 技术机试-182 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能是:内存中连续存放着 20 个十进制数字的 ASC字符,把它们转换成 10 个字节的压缩型(组合型) BCD 码。例如:内存中有:31H(1),32H(2),33H(3),34H(4)(共 20 个字节)结果为: 21H,43H,(共 10 个字节)部分程序已经给出,其中原始数据由过程 LOAD 从文件 INPUT1.DAT 中读入 SOURCE 开始的内存单元中,运算结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT
2、1.DAT 中。请填空 BEGIN 和 END 之间已给出的源程序使其完整,空白处已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可,或删去 BEGIN 和 END 之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.OBJ 连接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序存在错误之处,请加以修改。【试题程序】EXTRN LOAD:FAR, SAVE:FARN EQU 10STAC SEGMENT STACKDB 128 DUP (?)STAC ENDSDATA SEGMENTSOURCE DB N*2 DUP(?)RESULT DB N
3、 DUP(0)NAME0 DB INPUT1.DAT,0NAME1 DB OUTPUT1.DAT,0DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATA, SS: STACSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXLEA DX,SOURCE ; 数据区起始地址LEA SI,NAME0 ; 原始数据文件名MOV CX, N*2 ; 字节数CALL LOAD ; 从“INPUT1.DAT“中读取数据; * BEGIN *LEA SI,SOURCELEA DI,RESULTMOV CX,N
4、NEXT: MOV (1) ,SI(2) AND AL, (3) MOV BL,AL(4) ADD SI,2PUSH (5) MOV CL, (6) SAL AL,CLPOP (7) ADD AL, (8) MOV (9) ,AL(10) LOOP NEXT; * END *LEA DX,RESULT ; 结果数据区首址LEA SI,NAME1 ; 结果文件名CALL SAVE ; 保存结果到文件RETSTART ENDPCODE ENDSEND START(分数:100.00)_三级 PC 技术机试-182 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:1
5、00.00)1.请编制程序,其功能是:内存中连续存放着 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 之间已给出的源程序使其完整,空白处已用横线标出,每行空白一般只需一条
6、指令,但采用功能相当的多条指令亦可,或删去 BEGIN 和 END 之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.OBJ 连接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序存在错误之处,请加以修改。【试题程序】EXTRN LOAD:FAR, SAVE:FARN EQU 10STAC SEGMENT STACKDB 128 DUP (?)STAC ENDSDATA SEGMENTSOURCE DB N*2 DUP(?)RESULT DB N DUP(0)NAME0 DB INPUT1.DAT,0NAME1 DB OUTPUT1.DAT,0DATA END
7、SCODE SEGMENTASSUME CS: CODE, DS: DATA, SS: STACSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXLEA DX,SOURCE ; 数据区起始地址LEA SI,NAME0 ; 原始数据文件名MOV CX, N*2 ; 字节数CALL LOAD ; 从“INPUT1.DAT“中读取数据; * BEGIN *LEA SI,SOURCELEA DI,RESULTMOV CX,NNEXT: MOV (1) ,SI(2) AND AL, (3) MOV BL,AL(4) ADD SI,2PUSH
8、 (5) MOV CL, (6) SAL AL,CLPOP (7) ADD AL, (8) MOV (9) ,AL(10) LOOP NEXT; * END *LEA DX,RESULT ; 结果数据区首址LEA SI,NAME1 ; 结果文件名CALL SAVE ; 保存结果到文件RETSTART ENDPCODE ENDSEND START(分数:100.00)_正确答案:(AX (2) MOV BH,AH (3) 0FH (4) MOV AL (5) CX(6) 4 (7) CX (8) BL (9) DI (10) INC DI)解析:解析本题主要考查怎样将数字的 ASC字符进行压缩成 BCD 码。题目中所提供的程序是每次读取两个数字字符至 AX,分别对这两个字符进行处理,AL 取低 4 位并存入 BL 中,AH 左移 4 位,与此同时正好把高 4 位去掉并存入 AL 中,最后将 AL 和 BL 加在一起并存,放到结果数据区。