1、三级 PC技术机试-177 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能是:内存中存放着由 20个 16位有符号整数组成的序列,求出该序列中的最小值和最大值。结果存放形式为,先按原顺序存放 20个需处理的有符号整数,后跟该序列中的最小值和最大值(最小值在前,最大值在后)。例如:内存中有:8100H,0002H,0300H结果为: 8100H,0002H,0300H (由 20个 16位有符号整数组成的原序列),结果的后面跟该序列中的最小值和最大值(最小值在前,最大值在后)。部分程序已给出,其中原始数据由过程 LOAD从
2、文件 INPUT.DAT中读入 SOURCE开始的内存单元中,运算结果要求从 RESULT 开始存放,由过程 SAVE保存到文件 OUTPUT.DAT中。请填空 BEGIN和 END之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除 BEGIN和 END之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。【试题程序】XTRN LOAD:FAR,SAVE:FARN EQU 20STAC EGMENT STACKB 128
3、 DUP(?)STAC NDSDATA SEGMENTSOURCE DW N DUP(?)RESULT DW (N+2)DUP(0)NAME0 DB INPUT.DAT,0NAME1 DB OUTPUT.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 ; 从INPUT.DAT
4、中读取数据; * BEGIN *LEA SI,SOURCELEA DI,RESULTMOV BX, SI ; 第一个整数既为最大值(1) ; 又为最小值MOV DI,BXADD SI,2ADD DI,2(2) NEXT: MOV AX,SICMP AX,BXJLE (3) MOV; BX,AXJMP ENDLMIN: CMP AX,DX(4) ENDLMOV DX, AXENDL: MOV DI, AXADD SI,2ADD DI,2LOOP NEXT(5) ADD DI,2(6) ; * END *LEA DX,RESULT ; 结果数据区首址LEA SI,NAME1 ; 结果文件名NOV
5、CX,(2+N)*2 ; 结果字节数CALL SAVE ; 保存结果到文件RETSTART ENDPCODE ENDSEND START(分数:100.00)_三级 PC技术机试-177 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能是:内存中存放着由 20个 16位有符号整数组成的序列,求出该序列中的最小值和最大值。结果存放形式为,先按原顺序存放 20个需处理的有符号整数,后跟该序列中的最小值和最大值(最小值在前,最大值在后)。例如:内存中有:8100H,0002H,0300H结果为: 8100H,0002H,0300H
6、 (由 20个 16位有符号整数组成的原序列),结果的后面跟该序列中的最小值和最大值(最小值在前,最大值在后)。部分程序已给出,其中原始数据由过程 LOAD从文件 INPUT.DAT中读入 SOURCE开始的内存单元中,运算结果要求从 RESULT 开始存放,由过程 SAVE保存到文件 OUTPUT.DAT中。请填空 BEGIN和 END之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除 BEGIN和 END之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中
7、若发现整个程序中存在错误之处,请加以修改。【试题程序】XTRN LOAD:FAR,SAVE:FARN EQU 20STAC EGMENT STACKB 128 DUP(?)STAC NDSDATA SEGMENTSOURCE DW N DUP(?)RESULT DW (N+2)DUP(0)NAME0 DB INPUT.DAT,0NAME1 DB OUTPUT.DAT,0DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXLEA
8、DX,SOURCE ; 数据区起始地址LEA SI,NAME0 ; 原始数据文件名MOV CX,N*2 ; 字节数CALL LOAD ; 从INPUT.DAT中读取数据; * BEGIN *LEA SI,SOURCELEA DI,RESULTMOV BX, SI ; 第一个整数既为最大值(1) ; 又为最小值MOV DI,BXADD SI,2ADD DI,2(2) NEXT: MOV AX,SICMP AX,BXJLE (3) MOV; BX,AXJMP ENDLMIN: CMP AX,DX(4) ENDLMOV DX, AXENDL: MOV DI, AXADD SI,2ADD DI,2LO
9、OP NEXT(5) ADD DI,2(6) ; * END *LEA DX,RESULT ; 结果数据区首址LEA SI,NAME1 ; 结果文件名NOV CX,(2+N)*2 ; 结果字节数CALL SAVE ; 保存结果到文件RETSTART ENDPCODE ENDSEND START(分数:100.00)_正确答案:(1) MOV DX,SI (2) MOV CX,N-1 (3) MIN(4) JGE (5) MOV DI,DX (6) MOV DI,BX)解析:解析本题是一道最值计算题。最值计算包括求最大值和最小值两种情况,通常采用的力法是将第一个数假设为最大值和最小值,分别保存到表示最大值和最小值的变量中,再将后续数据分别与最大值数据和最小值数据进行比较,如果发现比最大值更大的数,则用新的数替换原来的最大值,如果发现比最小值更小的数,则用新的数替换最小值,直到处理完最后一个数为止,便可以同时得到最大值和最小值。