1、三级 PC技术机试-236 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.试题要求如下:请编制程序,其功能是:统计 20个学生成绩中得分在 10090,8980,7970、69 60 和低于 60分的人数,并计算 20个学生的平均成绩(取整数),结果依次存放在指定的区域内。例如:内存中有 5个分数:50H,40H,5EH,64H,48H结果为 02H,01H,01H,01H,00H,52H(平均成绩)部分程序己给出,其中原始数据由过程 LOAD从文件 INPUT1.DAT中读入 SOURCE开始的内存单元中,运算的结果要求从 RESULT
2、开始存放,由过程 SAVE保存到文件 OUTPUT1.DAT中。补充 BEGIN和 END之间已给出的源程序使其完整(空白己用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除 BEGIN和 END之间原有的代码并自行编程来完成要求的功能。对程序进行汇编,并与 IO.OBJ链接产生执行文件,最终运行程序产生结果。调试中发现整个程序中存在错误之处,请加以修改。试题程序:EXTRN LOAD: FAR, SAVE: FARN EQU 20L EQU 5DATA SEGMENTSOURCE DB N DUP(?)RESULT DB N+1DUP(0)NAME0 DB INPU
3、T 1.DAT, 0NAME1 DB OUTPUT1.DAT, 0DATA ENDSSSEG SEGMENT STACKDB 256DUP (?)SSEG ENDSCSEG SEGMENTASSUME CS: CSEG, SS: SSEG, DS: DATASTART PROC FARPUSH DSXOR AX, AXPUSH AXMOV AX, DATAMOV DS, AXLEA DX, SOURCE ;数据区起始地址LEA SI, NAME0 ;原始数据文件名MOV CX, N ;字节数CALL LOAD ;从INPUT1.DAT中读取数据; * BEGIN *LEA SI, SOURCE
4、LEA DI, RESULTXOR BX, BX(1) MOV CX, NGOON: LODSB(2) ADD BX, AX(3) JAE P1CMP AL, 80JAE P2CMP AL, 70JAE P3CMP AL, 60JAE P4INC (4) (5) P4: INC BYTE PTRDI+3JMP NEXTP3: INC BYTE PTRDI+2JMP NEXTP2: INC BYTE PTRDI+1JMP NEXTP1: INC BYTE PTRDINEXT: LOOP GOONMOV AX, BXMOV DL, (6) DIV DLMOV DI+5, AL; * END *LE
5、A DX, RESULT ; 结果数据区首址LEA SI, NAME1 ; 结果文件名MOV CX, L+1 ; 结果字节数CALL SAVE ; 保存结果到文件RETSTART ENDPCODE ENDSEND START(分数:100.00)_三级 PC技术机试-236 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.试题要求如下:请编制程序,其功能是:统计 20个学生成绩中得分在 10090,8980,7970、69 60 和低于 60分的人数,并计算 20个学生的平均成绩(取整数),结果依次存放在指定的区域内。例如:内存中有 5个分数
6、:50H,40H,5EH,64H,48H结果为 02H,01H,01H,01H,00H,52H(平均成绩)部分程序己给出,其中原始数据由过程 LOAD从文件 INPUT1.DAT中读入 SOURCE开始的内存单元中,运算的结果要求从 RESULT开始存放,由过程 SAVE保存到文件 OUTPUT1.DAT中。补充 BEGIN和 END之间已给出的源程序使其完整(空白己用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除 BEGIN和 END之间原有的代码并自行编程来完成要求的功能。对程序进行汇编,并与 IO.OBJ链接产生执行文件,最终运行程序产生结果。调试中发现整个程
7、序中存在错误之处,请加以修改。试题程序:EXTRN LOAD: FAR, SAVE: FARN EQU 20L EQU 5DATA SEGMENTSOURCE DB N DUP(?)RESULT DB N+1DUP(0)NAME0 DB INPUT 1.DAT, 0NAME1 DB OUTPUT1.DAT, 0DATA ENDSSSEG SEGMENT STACKDB 256DUP (?)SSEG ENDSCSEG SEGMENTASSUME CS: CSEG, SS: SSEG, DS: DATASTART PROC FARPUSH DSXOR AX, AXPUSH AXMOV AX, DA
8、TAMOV DS, AXLEA DX, SOURCE ;数据区起始地址LEA SI, NAME0 ;原始数据文件名MOV CX, N ;字节数CALL LOAD ;从INPUT1.DAT中读取数据; * BEGIN *LEA SI, SOURCELEA DI, RESULTXOR BX, BX(1) MOV CX, NGOON: LODSB(2) ADD BX, AX(3) JAE P1CMP AL, 80JAE P2CMP AL, 70JAE P3CMP AL, 60JAE P4INC (4) (5) P4: INC BYTE PTRDI+3JMP NEXTP3: INC BYTE PTRD
9、I+2JMP NEXTP2: INC BYTE PTRDI+1JMP NEXTP1: INC BYTE PTRDINEXT: LOOP GOONMOV AX, BXMOV DL, (6) DIV DLMOV DI+5, AL; * END *LEA DX, RESULT ; 结果数据区首址LEA SI, NAME1 ; 结果文件名MOV CX, L+1 ; 结果字节数CALL SAVE ; 保存结果到文件RETSTART ENDPCODE ENDSEND START(分数:100.00)_正确答案:(1) CLD ; 使 DF=0,在执行串处理指令时可以使地址自动增量(2) MOV AH, 0 ; 设初值(3) CMP AL, 90 ; 判断分数在 90100 分之间的个数(4) BYTE PTRDI+4 ; 设置平均值存储空间(5) JMP NEXT ; 无条件转移(6) N ; 计算 20个学生的平均成绩)解析:解析 程序中 GOON完成的是按题目的要求求出各段的数据,P1、P2、P3、P4 完成的分别是对各分数段的计数,NEXT 是求平均值。