1、三级 PC 技术机试-233 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.试题要求如下:请编制程序,其功能是:计算 102 矩阵中每一行元素(八位二进制数)之和,将其放在指定的内存区中。例如:内存中有:0,0(第 1 行),1,1(第 2 行),9,9(第 10 行)结果为: 0000H,0002H,0004H,0012H部分程序已给出,其中原始数据由过程 LOAD 从文件 INPUT1.DAT 中读入 SOURCE 开始的内存单元中,运算的结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT1.DAT 中。补
2、充 BEGIN 和 END 之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除 BEGIN 和 END 之间原有的代码并自行编程来完成要求的功能。对程序进行汇编,并与 IO.OBJ 链接产生执行文件,最终运行程序产生结果。调试中发现整个程序中存在错误之处,请加以修改。试题程序:EXTRN LOAD: FAR, SAVE: FARN EQU 20DATA SEGMENTSOURCE DB N DUP(?)RESULT DB N/3 DUP(0)I EQU 10J EQU 2NAME0 DB INPUT1.DAT, 0NAME1 DB O
3、UTPUT1.DAT, 0DATA ENDSSSEG SEGMENT STACKDB 256DUP (? )SSEG ENDSCSEG SEGMENTASSUME CS: CSEG, SS: SSEG, DS: DATASTART PROC FARPUSH DSXOR AX, AXPUSH AXMOV AX, DATAMOV DS, AXLEA DX, SOURCE ; 数据区起始地址LEA SI, NAME0 ; 原始数据文件名MOV CX, N ; 字节数CALL LOAD ; 从INPUT1.DAW中读取数据; * BEGIN *LEA SI, SOURCELEA DI, RESULTM
4、OV BX, 1LOP1 MOV DX, 0MOV CX, ILOP2 MOV AL, SI(1) ADD DX, AXINC (2) INC CXCMP CX, (3) JBE LOP2MOV DI, DXADD DI, (4) INC BXCMP BX, IJBE (5) ; * END *LEA DX, RESULT ; 结果数据区首址LEA SI, NAME1 ; 结果文件名MOV CX, L*2/3 ; 结果字节数CALL SAVE ; 保存结果到文件RETSTART ENDPCODE ENDSEND START(分数:100.00)_三级 PC 技术机试-233 答案解析(总分:1
5、00.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.试题要求如下:请编制程序,其功能是:计算 102 矩阵中每一行元素(八位二进制数)之和,将其放在指定的内存区中。例如:内存中有:0,0(第 1 行),1,1(第 2 行),9,9(第 10 行)结果为: 0000H,0002H,0004H,0012H部分程序已给出,其中原始数据由过程 LOAD 从文件 INPUT1.DAT 中读入 SOURCE 开始的内存单元中,运算的结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUT1.DAT 中。补充 BEGIN 和 END 之间已给出的源程序使其
6、完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除 BEGIN 和 END 之间原有的代码并自行编程来完成要求的功能。对程序进行汇编,并与 IO.OBJ 链接产生执行文件,最终运行程序产生结果。调试中发现整个程序中存在错误之处,请加以修改。试题程序:EXTRN LOAD: FAR, SAVE: FARN EQU 20DATA SEGMENTSOURCE DB N DUP(?)RESULT DB N/3 DUP(0)I EQU 10J EQU 2NAME0 DB INPUT1.DAT, 0NAME1 DB OUTPUT1.DAT, 0DATA ENDSSSE
7、G SEGMENT STACKDB 256DUP (? )SSEG ENDSCSEG SEGMENTASSUME CS: CSEG, SS: SSEG, DS: DATASTART PROC FARPUSH DSXOR AX, AXPUSH AXMOV AX, DATAMOV DS, AXLEA DX, SOURCE ; 数据区起始地址LEA SI, NAME0 ; 原始数据文件名MOV CX, N ; 字节数CALL LOAD ; 从INPUT1.DAW中读取数据; * BEGIN *LEA SI, SOURCELEA DI, RESULTMOV BX, 1LOP1 MOV DX, 0MOV
8、 CX, ILOP2 MOV AL, SI(1) ADD DX, AXINC (2) INC CXCMP CX, (3) JBE LOP2MOV DI, DXADD DI, (4) INC BXCMP BX, IJBE (5) ; * END *LEA DX, RESULT ; 结果数据区首址LEA SI, NAME1 ; 结果文件名MOV CX, L*2/3 ; 结果字节数CALL SAVE ; 保存结果到文件RETSTART ENDPCODE ENDSEND START(分数:100.00)_正确答案:(1) MOV AH, 0 ; 设初值(2) SI ; 向下移动地址,对下一个数据进行计算(3) J ; 判断数据是否超出该行的范围(4) 2 ; 保存所求的数据,下移两个单位是因为数据为字的形式(5) LOOP1)解析:解析 程序的功能是求出每行所有数据的和,该功能在 LOP2 中完成。首先从矩阵第一行第一列的数据开始算起,和该行的下一列数据求和,直到判断下个数据的计算个数超过 2 时,说明该行结束。然后保存该行计算完的和,注意,保存的数据应该是字的形式。