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,直至处理结束为止。