1、三级 PC 技术机试-167 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能是:内存中连续存放着五个用压缩型(组合型)BCD 码表示的 2 位十进制数,请将它们转换成十个 ASCII 字符,高位的 BCD 码转换后放在较高的地址单元。例如:内存中有:21H,43H,(共五个字节)结果为:31H(1),32H(2),33H(3),34H(4),(共十个字节)部分程序已经给出,其中原始数据由过程 LOAD 从文件 INPUT1.DA 丁中读入 SOURCE 开始的内存单元中,运算结果要求从 RESULT 开始存放, 由过程
2、SAVE 保存到文件 OUTPUT1DAT 中。请填空 BEGIN 和 END 之间已给出的源程序使其完整,空白处已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可,或删去 BEGIN 和 END 之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.OBJ 连接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序存在错误之处,请加以修改。试题程序EXTRN LOAD:FAR,SAVE:FARN EQU 5STAC SEGMENT STACKDB 128 DUP (?)STAC ENDSDATA SEGMENTSOURCE DB N DUP(?)R
3、ESULT DB N*2 DUP(0)NAME0 DB INPUT1DAT,0NAME1 DB OUTPUT1DAT,0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXLEA DX,SOURCE ;数据区起始地址LEA SI,NANE0 ;原始数据文件名MOV CX,N ;字节数CALL LOAD ;从“INPUTDAT“中读取数据; * BEGIN *LEA SI,SOURCELEA DI,RESULTMOV CX,NNEXT
4、 MOV (1) ,SI(2) MOV BL,ALAND AL, (3) OR AL,30HMOV DI, (4) (5) MOV AL, (6) PUSH (7) MOV CL, (8) SHR AL,CLPOP (9) OR AL,30HMOV DI,AL(10) LOOP NEXT; * END *LEA DX,RESULT ; 结果数据区首址LEA SI,NANE1 ; 结果文件名MOV CX,N*2 ; 结果字节数CALL SAVE ; 保存结果到文件RET START ENDP CODE ENDS END START(分数:100.00)_三级 PC 技术机试-167 答案解析(
5、总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能是:内存中连续存放着五个用压缩型(组合型)BCD 码表示的 2 位十进制数,请将它们转换成十个 ASCII 字符,高位的 BCD 码转换后放在较高的地址单元。例如:内存中有:21H,43H,(共五个字节)结果为:31H(1),32H(2),33H(3),34H(4),(共十个字节)部分程序已经给出,其中原始数据由过程 LOAD 从文件 INPUT1.DA 丁中读入 SOURCE 开始的内存单元中,运算结果要求从 RESULT 开始存放, 由过程 SAVE 保存到文件 OUTPUT1DAT
6、 中。请填空 BEGIN 和 END 之间已给出的源程序使其完整,空白处已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可,或删去 BEGIN 和 END 之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.OBJ 连接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序存在错误之处,请加以修改。试题程序EXTRN LOAD:FAR,SAVE:FARN EQU 5STAC SEGMENT STACKDB 128 DUP (?)STAC ENDSDATA SEGMENTSOURCE DB N DUP(?)RESULT DB N*2 DUP(0)NA
7、ME0 DB INPUT1DAT,0NAME1 DB OUTPUT1DAT,0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXLEA DX,SOURCE ;数据区起始地址LEA SI,NANE0 ;原始数据文件名MOV CX,N ;字节数CALL LOAD ;从“INPUTDAT“中读取数据; * BEGIN *LEA SI,SOURCELEA DI,RESULTMOV CX,NNEXT: MOV (1) ,SI(2) MOV
8、BL,ALAND AL, (3) OR AL,30HMOV DI, (4) (5) MOV AL, (6) PUSH (7) MOV CL, (8) SHR AL,CLPOP (9) OR AL,30HMOV DI,AL(10) LOOP NEXT; * END *LEA DX,RESULT ; 结果数据区首址LEA SI,NANE1 ; 结果文件名MOV CX,N*2 ; 结果字节数CALL SAVE ; 保存结果到文件RET START ENDP CODE ENDS END START(分数:100.00)_正确答案:(1)AL (2)INC SI (3)0FH (4)AL (5)INC DI(6)BL (7)CX (8)4 (9)CX (10)INC DI)解析:解析本题主要考查的是将压缩型 BcD 码转换为数字字符的方法,首先要将 BCD 码分离出来,转换为非压缩 BCD码,然后再转换为 ASCII 码。给出的程序是每次读取一个 BCD 码至 AL 中,然后再把 AL 存入 BI 中,取 AL的低 4 位再加 30H 就可以得到一个数字字符,放到结果数据区,结果数据区位置加 1,接着把 BL 中的数仍放到 AL 中,右移 4 位再加 30H,再次得到一个数字字符,再放到结果数据区,结果数据区位置加 1,直至处理结束为止。