1、全国计算机等级考试三级 PC 技术机试真题 2009 年 9 月及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序 ex9.ASM,其功能是:从 20 个有符号字节数据中取出负数并计算其绝对值之和(字型),然后存放在指定的内存区中,多余的空间填 0。例如:内存中有 80H,02H,00H,7CH,7BH,11H,结果为 80H,00H,FEH,00H,FDH,00H,85H,00H,部分程序已给出,其中原始数据由过程 LOAD 从文件 INPUT1.DAT 中读入 SOURCE 开始的内存单元中,运算的结果要求从 RESULT 开始
2、存放,由过程 SAVE 保存到文件 OUTPUT1.DAT 中。补充 BEGIN 和 END 之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除 BEGIN 和 END 之间原有的代码并自行编程来完成要求的功能。对程序进行汇编,并与 IO.OBJ 链接产生执行文件,最终运行程序产生结果。调试中发现整个程序中存在错误之处,请加以修改。试题程序 EXTRN LOAD:FAR,SAVE:FARN EQU 20STAC SEGMENT STACKDB 256 DUP(?)STAC ENDSDATA SEGMENTSOURCE DB N DUP
3、(?)RESULT DB N 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,AXMOV ES,AXLEA DX,SOURCE ;数据区起始地址LEA SI,NAME0 ;原始数据文件名MOV CX,N ;字节数CALL LOAD ;从INPUT1.DAT中读取数据; * BEGIN *LEA SI,SOURCELEA DI,RESUL
4、TMOV DX,0MOV CX,NCLDCON:LODSH(1) JGE (2) MOV DI,ALINC DI(3) INC DIADD DL,AL(4) NEXT:LOOP CONMOV DI,DXADD DI,2MOV CX,40SUB CX,DIMOV AL,0(5) ; *END*LEA DX,RESULT ;结果数据区首址LEA SI,NAME1 ;结果文件名MOV CX,N ;结果字节数CALL SAVE ;保存结果到文件RETSTART ENDPCODE ENDSEND START(分数:100.00)_全国计算机等级考试三级 PC 技术机试真题 2009 年 9 月答案解析(
5、总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序 ex9.ASM,其功能是:从 20 个有符号字节数据中取出负数并计算其绝对值之和(字型),然后存放在指定的内存区中,多余的空间填 0。例如:内存中有 80H,02H,00H,7CH,7BH,11H,结果为 80H,00H,FEH,00H,FDH,00H,85H,00H,部分程序已给出,其中原始数据由过程 LOAD 从文件 INPUT1.DAT 中读入 SOURCE 开始的内存单元中,运算的结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT1.DAT 中。补充 BEG
6、IN 和 END 之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除 BEGIN 和 END 之间原有的代码并自行编程来完成要求的功能。对程序进行汇编,并与 IO.OBJ 链接产生执行文件,最终运行程序产生结果。调试中发现整个程序中存在错误之处,请加以修改。试题程序 EXTRN LOAD:FAR,SAVE:FARN EQU 20STAC SEGMENT STACKDB 256 DUP(?)STAC ENDSDATA SEGMENTSOURCE DB N DUP(?)RESULT DB N DUP(0)NAME0 DB INPUT1.D
7、AT,0NAME1 DB OUTPUT1.DAT,0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXLEA DX,SOURCE ;数据区起始地址LEA SI,NAME0 ;原始数据文件名MOV CX,N ;字节数CALL LOAD ;从INPUT1.DAT中读取数据; * BEGIN *LEA SI,SOURCELEA DI,RESULTMOV DX,0MOV CX,NCLDCON:LODSH(1) JGE (
8、2) MOV DI,ALINC DI(3) INC DIADD DL,AL(4) NEXT:LOOP CONMOV DI,DXADD DI,2MOV CX,40SUB CX,DIMOV AL,0(5) ; *END*LEA DX,RESULT ;结果数据区首址LEA SI,NAME1 ;结果文件名MOV CX,N ;结果字节数CALL SAVE ;保存结果到文件RETSTART ENDPCODE ENDSEND START(分数:100.00)_正确答案:(; * BEGIN *LEA SI,SOURCELEA DI,RESULTMOV DX,0MOV CX,NCLDCON:LODSBCMP
9、AL,0JGE NEXTMOV DI,ALINC DINEG ALINC DIADD DL,ALADC DH,0NEXT:LOOP CONMOV DI,DXADD DI,2MOV CX,40SUB CX,DIMOV AL,0REP STOSB; *END*)解析:解析 本题主要考查有符号数的绝对值之和问题。考生需要注意从 20 个有符号字节数据中取出负数并计算其绝对值之和(字型),然后存放在指定的内存区中,多余的空间用 0 来填补。本题的难点在于从所给的数据中取出负数并计算绝对值之和。其中,CON 所完成的是判断数据,如果是负数则取反加 1,即变为它的绝对值再求和。否则转到 NEXT 中,继续循环判断数据,直到所有数据判断完。