1、三级 PC 技术机试-217 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序 PROG1.ASM,其功能是:对内存中连续存放着 20 个补码表示的无符号整数进行从大到小的排序,结果存放在 RESULT 开始的内存单元中。部分程序已给出,其中原始数据由过程 LOAD 从文件 INPUT1.DAT 中读入 SOURCE 开始的内存单元中。运算结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT1.DAT 中。请在 BEGIN 和 END 之间补充一段源程序,完成要求的功能。对程序必须进行汇编,并与 IO.O
2、BJ 链接产生 PROG1.EXE 执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。试题程序:EXTRN LOAD:FAR, SAVE:FARN EQU 20DSEG SEGMENTSOURCE DW N DUP(?) ; 存放原始数据RESULT DW N DUP(0) ; 存放运算结果NAME0 DB INPUT1.DAT,0NAME1 DB OUTPUT1.DAT,0DSEG ENDSSSEG SEGMENT STACKDB 128 DUP(?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG, DS:DSEG, SS:SSEGSTART PROC
3、FARPUSH DSXOR AX,AXPUSH AXMOV AX,DSEGMOV DS,AXMOV ES,AXLEA DX,SOURCE ; 数据区起始地址LEA SI,NAMEO ; 原始数据文件名MOV CX.N ; 字节数CALL LOAD ; 从INPUT1.DAT中读取数据;*BEGIN* ;*END*LEA DX,RESULT ; 结果数据区首址LEA SI,NAME1 ; 结果文件名MOV CX,N ; 结果字节数CALL SAVE ; 保存结果到文件RETSTART ENDPCSEG ENDSEND START(分数:100.00)_三级 PC 技术机试-217 答案解析(总分
4、:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序 PROG1.ASM,其功能是:对内存中连续存放着 20 个补码表示的无符号整数进行从大到小的排序,结果存放在 RESULT 开始的内存单元中。部分程序已给出,其中原始数据由过程 LOAD 从文件 INPUT1.DAT 中读入 SOURCE 开始的内存单元中。运算结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT1.DAT 中。请在 BEGIN 和 END 之间补充一段源程序,完成要求的功能。对程序必须进行汇编,并与 IO.OBJ 链接产生 PROG1.EXE 执行文件,
5、最终运行程序产生结果(无结果或结果不正确者均不得分)。试题程序:EXTRN LOAD:FAR, SAVE:FARN EQU 20DSEG SEGMENTSOURCE DW N DUP(?) ; 存放原始数据RESULT DW N DUP(0) ; 存放运算结果NAME0 DB INPUT1.DAT,0NAME1 DB OUTPUT1.DAT,0DSEG ENDSSSEG SEGMENT STACKDB 128 DUP(?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG, DS:DSEG, SS:SSEGSTART PROC FARPUSH DSXOR AX,AXPUSH
6、 AXMOV AX,DSEGMOV DS,AXMOV ES,AXLEA DX,SOURCE ; 数据区起始地址LEA SI,NAMEO ; 原始数据文件名MOV CX.N ; 字节数CALL LOAD ; 从INPUT1.DAT中读取数据;*BEGIN* ;*END*LEA DX,RESULT ; 结果数据区首址LEA SI,NAME1 ; 结果文件名MOV CX,N ; 结果字节数CALL SAVE ; 保存结果到文件RETSTART ENDPCSEG ENDSEND START(分数:100.00)_正确答案:(; *BEGIN*MOV DX,NDEC DXL1: LEA SI,SOURC
7、EMOV CX,DXMOV BX,0L2: MOV AL,SIINC SICMP AL,SIJAE L3MOV AH,SIMOV SI ,ALMOV SI-1,AHMOV BX, 1L3: LOOP L2CMP BX,0JZ STOREDEC DXJNZ L1STORE: MOV CX,NLEA SI,SOURCELEA DI,RESULTCLDREP MOVSB; *END*)解析:解析 本题可采用冒泡排序算法。对于 SOURCE 开始的 20 个内存单元中的无符号数,依次将相邻的两个数进行比较,每次将较小的数调整到后面。经过一轮比较后,最小的数排到第 20 个位置;再将剩下的 19 个数两两进行比较,排在第 19 个位置上的数为次小数;重复比较共 19 遍,完成排序操作。