1、PC技术机试模拟试卷 53及答案与解析 一、程序设计题 1 请编制程序,其功能是:对经常上下波动的数据可采用只记录峰值的数据压缩方法。即每次将采样到的当前值和前一次值比较,如数据变化方向改变 (原变大现变小或原变小现变大 ),说明已过峰值,这时就将前一值 (峰值 )记录下来。 例如 (下例数据均为无符号数 ): 原数据: 23H, 45H, 89H, 67H, 5CH, 36H, 3CH 压缩后: 23H, 89H, 36H 内存中从 SOURCE连续存放着 48个八位无符号数,假定无相邻两数相等的情况,编程按 上述方法进行压缩,结果保存在 RESULT开始的内存单元中。 部分程序已给出,请填
2、空 BEGIN和 END之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除 BEGIN和 END之间原有的代码并自行编写程序片段来完成所要求的功能。 原始数据由过程 LOAD从文件 INPUT.DAT中读入 SOURCE开始的内存单元中,结果要求从 RESULT开始存放,由过程 SAVE保存到文件 OUTPUT.DAT中。 对程序必须进行汇编,并与 IO.OBJ链接产生可 执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 试题程序 EXTRN LOAD: FAR, SAVE: FAR N EQU 40 S
3、TAC SEGMENT STACK DB 128 DUP(?) STAC ENDS DATA SEGMENT SOURCE DB N DUP(?) RESULT DB N DUP(0) NAME0 DB INPUT DAT, 0 NAME1 DB OUTPUT DAT, 0 DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA, SS: STAC START PROC FAR PUSH DS XOR AX, AX PUSH AX MOV AX, DATA MOV DS, AX MOV ES, AX ;置附加段寄存器 LEA DX, SOURCE ;数
4、据区起始地址 LEA SI, NAME0 ;原始数据文件名起始地址 MOV CX, N ;字节数 CALL LOAD ;从 INPUT DAT中读取数据 ; * BEGIN * LEA SI, SOURCE LEA DI, RESULT CLD MOVSB ; Y0=X0 XOR AX, AX XOR BX, BX LODSB MOV BL, SI-2 SUB AX, AX ; X1-X0 MOV DX, AX MOV CX, N-2 FILTER: XOR AX, AX XOR BX, BX LODSB ; Xn MOV BL, SI-2 ; Xn-1 SUB AX, BX ; Xn-Xn-
5、1 (1) ;相邻两差值 (Ax, Dx)符号位是否相同 (2) J (3) SKIP ;相同,数据方向未变 (4) ;不同,方向变化,保存峰值 STOSB SKIP: (5) LOOP FILTER ; * END * LEA DX, RESULT ;数据区起始地址 LEA SI, NAME1 ; 结果文件名起始地址 MOV CX, N ;字节数 CALL SAVE ;保存结果到 OUTPUT.DAT 文件中 RET START ENDP CODE ENDS END START PC技术机试模拟试卷 53答案与解析 一、程序设计题 1 【正确答案】 (1)XOR DX, AX (2)AND
6、DH, 80H (3)Z (4)MOVAL, SI-2 (5)MOV DX, AX 【试题解析】 本题是一道综合题,其所采用的算法是读取第一个数并保存到结果数据区,然后再读取第二个数,将第一个数和第二个数相减,将结果保存起来,读取第三个数,然后将第二个数和第三个数相减,将得到的结果和前面得到的结果进行符号位的判断,如果相同则表明数据变化方向相同,不用保存第二个数据,如果不同则说明数据变化方向相反,需要保存第二个数据,后面的数据依次类推,直到最后一个数据为止。 解决此类题型时,根据所采用的算法不同,其技巧也有一定的区别,而本程序中就用异或运算将 Ax和 Bx设置为 0;将两次差值进行异或运算,并将运算结果与80H进行与运算,以此判断两个差值的符号位是否相同。通过判断两个差值的符号位是否相同来判断数据变化方向是否相同。