1、三级 PC 技术机试-206 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能为:从 SOURCE 开始的内存区域存放着 N 个字节的有符号数。现找出最大的数,结果存放到 RESULT 指示的,其后存放原 N 个数逻辑取反后的值。例如:数据为:09H,7EH,89H,F6H,17H67H(N 个数据)结果为:7EH (最大数),F6H,81H,76H,0CH,E8H98H(原 N 个数的逻辑反)部分程序已经给出,其中原始数据由 LOAD 过程从文件 INPUT1.DAT 中读入从 SOURCE 开始的内存单元,运算结果要求
2、从 RESIULT 开始存放,由 SAVE 过程保存到 OUTPUT1.DAT 文件中。请在 BEGIN 和 END 之间补充使其完整,完成要求的功能。或删除 BEGIN 和 END 之间原有的代码井自行编程来完成要求的功能。对程序必须进行汇编,并与 IO. OBJ 链接产生 PROG1. EXE 执行文件,最终产生运行结果。部分程序如下;;PROG1. ASMEXTRN LOAD: FAR,SAVE:FARN EQU 30DSEG SEGMENTSOURCE DW N DUP (?)RESULT DW N DUP (0)NAME0 DB INPUT1.DAT,0NAME1 DB OUTPUT
3、1.DAT,0DSEG ENDSSSEG SEGMENT STACKDB 128 DUP (?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG;SS:SSEGSTART PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX, DSEGMOV DS,AXMOV ES,AXLEA DX,SOURCELEA SI,NAME0MOV CX,NCALL LOAD; * BEGIN *_ SI,SOURCEMOV BX,OFFSET SOURCELEA DI,RESULTL1: MOV CX,NMOV DX,CXDEC DXMOV AL,_L2
4、: INC BX_ AL,BX_ MOV AL,BXL3: DEC DXJNZ_MOV DI,ALINC DICLDMAX: LODSBNOT AL_LOOP MAX; * END *LEA DX,RESULTLEA SI,NAME1MOV CX,NCALL SAVERETSTART ENDPCSEG ENDSEND START(分数:100.00)_三级 PC 技术机试-206 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能为:从 SOURCE 开始的内存区域存放着 N 个字节的有符号数。现找出最大的数,结果存放到 RE
5、SULT 指示的,其后存放原 N 个数逻辑取反后的值。例如:数据为:09H,7EH,89H,F6H,17H67H(N 个数据)结果为:7EH (最大数),F6H,81H,76H,0CH,E8H98H(原 N 个数的逻辑反)部分程序已经给出,其中原始数据由 LOAD 过程从文件 INPUT1.DAT 中读入从 SOURCE 开始的内存单元,运算结果要求从 RESIULT 开始存放,由 SAVE 过程保存到 OUTPUT1.DAT 文件中。请在 BEGIN 和 END 之间补充使其完整,完成要求的功能。或删除 BEGIN 和 END 之间原有的代码井自行编程来完成要求的功能。对程序必须进行汇编,并
6、与 IO. OBJ 链接产生 PROG1. EXE 执行文件,最终产生运行结果。部分程序如下;;PROG1. ASMEXTRN LOAD: FAR,SAVE:FARN EQU 30DSEG SEGMENTSOURCE DW N DUP (?)RESULT DW N DUP (0)NAME0 DB INPUT1.DAT,0NAME1 DB OUTPUT1.DAT,0DSEG ENDSSSEG SEGMENT STACKDB 128 DUP (?)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG;SS:SSEGSTART PROC FARPUSH DSXOR
7、AX,AXPUSH AXMOV AX, DSEGMOV DS,AXMOV ES,AXLEA DX,SOURCELEA SI,NAME0MOV CX,NCALL LOAD; * BEGIN *_ SI,SOURCEMOV BX,OFFSET SOURCELEA DI,RESULTL1: MOV CX,NMOV DX,CXDEC DXMOV AL,_L2: INC BX_ AL,BX_ MOV AL,BXL3: DEC DXJNZ_MOV DI,ALINC DICLDMAX: LODSBNOT AL_LOOP MAX; * END *LEA DX,RESULTLEA SI,NAME1MOV CX,
8、NCALL SAVERETSTART ENDPCSEG ENDSEND START(分数:100.00)_正确答案:(答案 本题答案为:; * BEGIN *LEA SI, SOURCEMOV BX,OFFSET SOURCELEA DI, RESULTL1: MOV CX,NMOV DX, CXDEC DX ; 第一个数已经取出,故还剩 N-1 个数需做比较MOV AL, BX ; 将 SOURCE 中的第一个数传至 AL 中L2: INC BXCMP AL, BX ; 当前最大值与 BX 所指 SOURCE 数据区中的数JGE L3 ; 若大于或等于,则转移至 L3MOV AL, BX ;
9、 否则,用 BX 所指向的数改写 AL 寄存器的内容L3: DEC DXJNZ L2 ; 若不等于 0,转移至 L2MOV DI ,ALINC DICLDMAX: LODSBNOT ALSTOSBLOOP MAX; * END *INPUT1. DAT 中的输入数据:50H,61H,72H,83H,94H,2BH,51H,11H,45H,E9H09H,7EH,89H,F6H,17H,43H,34H,12H,67H,35H3DH,2EH,5AH,44H,12H,23H, 17H,46H,36H,47H输出结果7E AF 9E 8D 7C 6B D4 AE EE BA 16 F6 81 76 09 E8BC CB ED 98 CA C2 D1 A5 BB ED DC E8 B9 C9)解析: