1、PC技术机试模拟试卷 29及答案与解析 一、程序设计题 1 请编制程序 PROG1.ASM,其功能是:对内存中连续存放着 20个补码表示的无符号整数进行从大到小的排序,结果存放在 RESULT开始的内存单元中。 部分程序已给出,其中原始数据由过程 LOAD从文件 INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从 RESULT开始存放,由过程 SAVE保存到文刊: OUTPUT1.DAT中。请在 BEGIN和 END之间补充一段源程序,完成要求的功能。 对程序必须进行汇编,并与 IO.OBJ链 接产生 PROG1.EXE执行文件,最终运行程序产生结果 (无结果或结果不正确者
2、均不得分 )。 试题程序: EXTRN LOAD:FAR, SAVE:FAR N EQU 20 DSEG SEGMENT SOURCE DW N DUP(?) ; 存放原始数据 RESULT DW N DUP(0) ; 存放运算结果 NAME0 DB INPUT1.DAT,0 NAME1 DB OUTPUT1.DAT,0 DSEG ENDS SSEG SEGMENT STACK DB 128 DUP(?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG, DS:DSEG, SS:SSEG START PROC FAR PUSH DS XOR AX,AX PUSH A
3、X MOV AX,DSEG MOV DS,AX MOV ES,AX LEA 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 ; 保存结果到文件 RET START ENDP CSEG ENDS END START PC技术机试模拟试卷 29答案与解析 一、程序设计题 1 【正确答案】 ; *BE
4、GIN* MOV DX,N DEC DX L1: LEA SI,SOURCE MOV CX,DX MOV BX,0 L2: MOV AL,SI INC SI CMP AL,SI JAE L3 MOV AH,SI MOV SI ,AL MOV SI-1,AH MOV BX, I L3: LOOP L2 CMP BX,0 JZ STORE DEC DX JNZ L1 STORE: MOV CX,N LEA SI,SOURCE LEA DI,RESULT CLD REP MOVSB ; *END* 【试题解析】 本题可采用冒泡排序算法。对于 SOURCE开始的 20个内存单元中的无符号数,依次将 相邻的两个数进行比较,每次将较小的数调整到后面。经过一轮比较后,最小的数排到第 20个位置;再将剩下的 19个数两两进行比较,排在第 19个位置上的数为次小数;重复比较共 19遍,完成排序操作。