1、三级 PC 技术机试-230 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序 PROG1.ASM,其功能是:计算 103 矩阵中每一行元素(八位二进制数)之和,并将其存放在指定的内存区中。例如:内存中有 0,0,0,(第 1 行),1,1,1,(第 2 行),9,9,9(第 10 行)结果为 0000H,0003H,001BH部分程序已经给出,其中原始数据由过程 LOAD 从文件 INPUT1.DAT 中读入 SOURCE 开始的内存元中,转换结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT1.DA
2、T 中。填空 BEGIN 和 END 之间已经给出的一段源程序使其完整,填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),考生也可以填入功能相当的多条指令,或删去 BEGIN 和 END 之间原有的代码并自行编程来完成要求的功能。对程序必须进行汇编,并与 IO.OBJ 链接产生 PROG1.EXE 执行文件,最终运行程序产生结果 (无结果或结果不正确者均不得分)。PROG1.ASM 文件内容如下:EXTRN LOAD: FAR, SAVE: FARN EQU 30DSEG SEGMENTSOURCE DB N DUP( ? )RESULT DW N/3 D
3、UP(0)I EQU 10J EQU 3NAME0 DB INPUT1. DAT ,0NAME1 DB OUTPUT1. DAT ,0DSEG ENDSSSEG SEGMENT STACKDB 256 DUP(?)SSEG ENDSCSEG SEGMENTASSUME CS: CSEG, SS: SSEG, DS: DSEGSTART PROC FARPUSH DSXOR AX, AXPUSH AXMOV AX, DSEGMOV DS, AXMOV ES, AXLEA DX, SOURCELEA SI, NAMEOMOV CX, NCALL LOAD; * * * BEGIN * * *LEA
4、 SI, SOURCELEA DI, RESULTMOV BX, 1LPI: MOV DX,OMOV CX, 1LPJ: MOV AL, SI_ADD DX, AXINC _INC CXCMP CX,_JBE LPJMOV DI,_ADD DI,_INC BXCMP BX, IJBE LPI; * * * END * * *LEA DX, RESULTLEA SI, NAME1MOV CX, N/3CALL SAVERETSTART ENDPCSEG ENDSEND START(分数:100.00)_三级 PC 技术机试-230 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(
5、总题数:1,分数:100.00)1.请编制程序 PROG1.ASM,其功能是:计算 103 矩阵中每一行元素(八位二进制数)之和,并将其存放在指定的内存区中。例如:内存中有 0,0,0,(第 1 行),1,1,1,(第 2 行),9,9,9(第 10 行)结果为 0000H,0003H,001BH部分程序已经给出,其中原始数据由过程 LOAD 从文件 INPUT1.DAT 中读入 SOURCE 开始的内存元中,转换结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT1.DAT 中。填空 BEGIN 和 END 之间已经给出的一段源程序使其完整,填空处已经用横线标出,每
6、个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),考生也可以填入功能相当的多条指令,或删去 BEGIN 和 END 之间原有的代码并自行编程来完成要求的功能。对程序必须进行汇编,并与 IO.OBJ 链接产生 PROG1.EXE 执行文件,最终运行程序产生结果 (无结果或结果不正确者均不得分)。PROG1.ASM 文件内容如下:EXTRN LOAD: FAR, SAVE: FARN EQU 30DSEG SEGMENTSOURCE DB N DUP( ? )RESULT DW N/3 DUP(0)I EQU 10J EQU 3NAME0 DB INPUT1. DAT ,0NAME1
7、 DB OUTPUT1. DAT ,0DSEG ENDSSSEG SEGMENT STACKDB 256 DUP(?)SSEG ENDSCSEG SEGMENTASSUME CS: CSEG, SS: SSEG, DS: DSEGSTART PROC FARPUSH DSXOR AX, AXPUSH AXMOV AX, DSEGMOV DS, AXMOV ES, AXLEA DX, SOURCELEA SI, NAMEOMOV CX, NCALL LOAD; * * * BEGIN * * *LEA SI, SOURCELEA DI, RESULTMOV BX, 1LPI: MOV DX,OM
8、OV CX, 1LPJ: MOV AL, SI_ADD DX, AXINC _INC CXCMP CX,_JBE LPJMOV DI,_ADD DI,_INC BXCMP BX, IJBE LPI; * * * END * * *LEA DX, RESULTLEA SI, NAME1MOV CX, N/3CALL SAVERETSTART ENDPCSEG ENDSEND START(分数:100.00)_正确答案:(;* * * BEGIN * * *LEA SI,SOURCELEA DI,RESULTMOV BX,1 ;设置 BX,BX 用于行处理计数LPI:MOV DX,0 ;LPI 用
9、于每行处理前的设初值;DX 用于每行累计求和MOV CX,1 ;CX 用于每行求和计数LPJ: MOV AL,SICBW ;将 AL 字节的符号扩展到 AH 中ADD DX,AX ;求和INC SI ;SI 指向下一个存储单元INC CX ;每加一次 CX 累加 1CMP CX,3 ;若 CX 大于 3,则此行求和结束JBE LPJ ;否则此行继续求和MOV DI, DX ;和值存入目的存储区ADD DI,1 ;DI 指向目的存储区下一个存储单元INC BX ;累计处理过的行数CMP BX,I ;若 BX 大于 I,则整个求和存储过程完成,否则返回 LPI 继续求和JBE LPI; * * * END * * *输入数据:010101020202030303040404050505060606070707080808090909101010输出结果:03 06 09 0C 0F 12 15 18 1B 30)解析: