1、三级 PC技术机试-117 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.编制一个程序,其实现的功能是:对一个数字采集系统采集的 50个字节无符号数按算术平均数字滤波方法进行数字滤波,每 5个数求一个平均数(含余数,其中低字节为商,高字节为余数),将 10个平均值依次存入 RESULT指示的内存区域。例如:原始采集数据:05H,07H,12H,08H,10H,09H,2EH,56H,48H,85H,65H,36H,45H则结果为: 0A04H,4003H部分程序已经给出,其中原始数据由过程 LOAD从文件 INPUTDAT 中读入以 SO
2、URCE开始的内存单元中。运算结果要求从 RESULT开始的内存单元存放,由过程 SAVE保存到文件 OUTPUT.DAT中。请填空 BEGIN和 END之间已给出的源程序使其完整,空白已经用横线标出,每行空白一般只需要一条指令,但采用功能相当的多条指令也行,考生也可以删除 BEGIN和 END之间原有的代码并自行编程来完成要求的功能。对程序必须进行汇编,并与 IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。【试题程序】EXTRN LOAD:FAR,SAVE:FARN EQU 10DSEG SEGMENT SOURCE DB 6*N DUP
3、(?)RESULT DW N DUP(0)NAME0 DB INPUT.DAT,0NAME1 DB OUTPUT.DAT,0DSEG ENDS SSEG SEGMENT STACKDB 256 DUP(?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DSEGMOV DS,AXLEA DX,SOURCELEA SI,NAME0MOV CX,6*NCALL LOAD;* BEGIN *LEA SI,SOURCELEA DI,RESULTMOV DX,NA
4、GAIN: SUB AX,AX(1) MOV CX,6AGAIN1: MOV AX,SIADD BX,ALINC SI(2) (3) MOV CL,6(4) (5) ADD DI,2DEC DXJNZ AGAIN;* END *LEA DX,RESULT LEA SI,NAME1MOV CX,N*2CALL SAVERETSTART ENDPCSEG ENDSEND START(分数:100.00)_三级 PC技术机试-117 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.编制一个程序,其实现的功能是:对一个数字采集系统采集的 50个字节无
5、符号数按算术平均数字滤波方法进行数字滤波,每 5个数求一个平均数(含余数,其中低字节为商,高字节为余数),将 10个平均值依次存入 RESULT指示的内存区域。例如:原始采集数据:05H,07H,12H,08H,10H,09H,2EH,56H,48H,85H,65H,36H,45H则结果为: 0A04H,4003H部分程序已经给出,其中原始数据由过程 LOAD从文件 INPUTDAT 中读入以 SOURCE开始的内存单元中。运算结果要求从 RESULT开始的内存单元存放,由过程 SAVE保存到文件 OUTPUT.DAT中。请填空 BEGIN和 END之间已给出的源程序使其完整,空白已经用横线标
6、出,每行空白一般只需要一条指令,但采用功能相当的多条指令也行,考生也可以删除 BEGIN和 END之间原有的代码并自行编程来完成要求的功能。对程序必须进行汇编,并与 IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。【试题程序】EXTRN LOAD:FAR,SAVE:FARN EQU 10DSEG SEGMENT SOURCE DB 6*N DUP(?)RESULT DW N DUP(0)NAME0 DB INPUT.DAT,0NAME1 DB OUTPUT.DAT,0DSEG ENDS SSEG SEGMENT STACKDB 256 DU
7、P(?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DSEGMOV DS,AXLEA DX,SOURCELEA SI,NAME0MOV CX,6*NCALL LOAD;* BEGIN *LEA SI,SOURCELEA DI,RESULTMOV DX,NAGAIN: SUB AX,AX(1) MOV CX,6AGAIN1: MOV AX,SIADD BX,ALINC SI(2) (3) MOV CL,6(4) (5) ADD DI,2DEC DXJN
8、Z AGAIN;* END *LEA DX,RESULT LEA SI,NAME1MOV CX,N*2CALL SAVERETSTART ENDPCSEG ENDSEND START(分数:100.00)_正确答案:(1)SUB BX,BX 或 XOR BX,BX 或 MOV BX,0 (2)LOOP AGAIN1(3)MOV AX,BX (4)DIV CL (5)MOVDI,AX)解析:解析如果将数据中 6个数分为一组的话,则对每一组的操作是一样的,即求这一组数的平均数,因此只需要实现一组的操作,其他的用循环程序来实现。将指针初始化以后,将循环的参数送 DX寄存器,用来控制循环。进入循环以后
9、,因为每次循环都要使用某些寄存器,并且每次的内容都不一样,所以要对部分寄存器进行清零操作。从后面的程序可以看出,BX寄存器是用来进行求和操作的,所以在每次进行求和操作之前应该对其进行清零操作,否则会把前一次的结果累加到后一次中。因此,需要对 BX寄存器进行清零,这就是第一个空白处应该填的内容。通常进行清零的操作有 SUB BX,BX 或 XOR BX,BX 或 MOV BX,0。完成清零工作以后,便对数据进行处理。要求一组数据的平均数,首先要进行求和操作,从程序中可以看出求和操作用循环 AGAIN1来实现,然而程序中没有控制 AGAIN1循环结束的语句(即判断什么情况继续循环,什么情况停止循环
10、向下执行的语句),所以需要在空白处填写。从第二个空白以上的程序来看,已经完成了加法运算,只需要控制其循环结束即可,所以要在第二个空白处填控制循环语句。在前面的程序中,已经将循环次数送到 CX中,因此用 LOOP AGAIN1即可控制求和运算的循环。求和结束以后,就要对数据进行除法操作。由于程序中除数为 6,所以被除数放到 AX中即可。前面的求和操作结束时,所得结果最后存放的寄存器为 BX,因此需要将数据从 BX传送到 AX中。传送结束以后,就可以进行除法操作。除完以后,将结果存入 RESULT中,所以第三个、第四个和第五个空加上已经有的语句需要完成上述操作。在第三个空中,将被除数传送到 BX,因此指令为 MOV AX,BX。MOV CL,6,将除数传送到 CL寄存器中,接下来进行除法操作,即第四个空要填写的内容为 DIV CL。执行完除法操作以后,商和余数分别位于 AL和 AH寄存器中,与题目要求的商在低字节,余数在高字节的要求刚好吻合,因此直接送入 RESULT中即可,这样便由最后一个空来实现,而指针 DI已经指向 RESULT,所以应填 MOV DI,AX。