1、PC技术机试模拟试卷 37及答案与解析 一、程序设计题 1 请编制程序,其功能为:从 SOURCE开始的内存区域存放着 N个字节的有符号数。现找出最大的数,结果存放到 RESULT 指示的,其后存放原 N个数逻辑取反后的值。 例如: 数据为: 09H, 7EH, 89H, F6H, 17H67H(N 个数据 ) 结果为: 7EH (最大数 ), F6H, 81H, 76H, 0CH, E8H98H( 原 N个数的逻辑反 ) 部分程序已经给出,其中原始数据由 LOAD过程从文件 INPUT1.DAT 中读入从SOURCE开始的内存单元,运算结果要求从 RESIULT开始存放,由 SAVE 过程保
2、存到 OUTPUT1.DAT 文件中。请在 BEGIN和 END 之间补充使其完整,完成要求的功能。或删除 BEGIN和 END 之间原有的代码井自行编程来完成要求的功能。 对程序必须进行汇编,并与 IO. OBJ 链接产生 PROG1. EXE 执行文件,最终产生运行结果。 部分程序如下; ;PROG1. ASM EXTRN LOAD: FAR, SAVE:FAR N EQU 30 DSEG SEGMENT SOURCE DW N DUP (?) RESULT DW N DUP (0) NAME0 DB INPUT1.DAT, 0 NAME1 DB OUTPUT1.DAT,0 DSEG EN
3、DS SSEG SEGMENT STACK DB 128 DHP (?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG;SS:SSEG START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX, DSEG MOV DS,AX MOV ES, AX LEA DX,SOURCE LEA SI,NAME0 MOV CX,N CALL LOAD ; * BEGIN * _ SI,SOURCE MOV BX,OFFSET SOURCE LEA DI,RESULT L1: MOV CX,N MOV DX,CX DEC DX
4、 MOV AL,_ L2: INC BX _ AL,BX _ MOV AL,BX L3: DEC DX JNZ_ MOV DI,AL INC DI CLD MAX: LODSB NOT AL _ LOOP MAX ; * END * LEA DX,RESULT LEA SI,NAME1 MOV CX,N CALL SAVE RET START ENDP CSEG ENDS END START PC技术机试模拟试卷 37答案与解析 一、程序设计题 1 【正确答案】 ; * BEGIN * LEA SI, SOURCE MOV BX,OFFSET SOURCE LEA DI, RESULT L1:
5、 MOV CX,N MOV DX, CX DEC DX ; 第一个数已经取出,故还剩 N-1个数需做比较 MOV AL, BX ; 将 SOURCE 中的第一个数传至 AL中 L2: INC BX CMP AL, BX ; 当前最大值与 BX 所指 SOURCE 数据区中的数 JGE L3 ; 若大于或等于,则转移至 L3 MOV AL, BX ; 否则,用 BX 所指向的数改 写 AL寄存器的内容 L3: DEC DX JNZ L2 ; 若不等于 0,转移至 L2 MOV DI ,AL INC DI CLD MAX: LODSB NOT AL STOSB LOOP MAX ; * END * INPUT1. DAT 中的输入数据 : 50H,61H,72H,83H,94H,2BH,51H,11H,45H,E9H 09H,7EH,89H,F6H, 17H,43H,34H,12H,67H,35H 3DH,2EH,fAH,44H, 12H,23H, 17H,46H,36H,47H 输出结果 7E AF 9E 8D 7C 6B D4 AE EE BA 16 F6 81 76 09 E8 BC CB ED 98 CA C2 D1 A5 BB ED DC E8 B9 C9