1、三级 PC 技术机试-152 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,其功能是:从第 0 行第 0 列开始,依次取出 N 阶矩阵中对角线上的元素(字节型)并计算累加和(字型),然后将其存放在指定的内存区中。例如:内存中有:01H,01H,01H,02H,02H,02H,03ff,03H,03H结果为: 01H,02H,03H,06H,00H部分程序已给出,其中原始数据由过程 LOAD 从文件 INPUTDAT 中读入 SOURCE 开始的内存单元中,转换结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 O
2、UTPUTDAT 中。请填空 BEGIN 和 END 之间已经给出的一段源程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去 BEGIN和 END 之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.OBJ 链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。【试题程序】EXTRN LOAD:FAR, SAVE:FARN EQU 10DSEG SEGMENT SOURCE DB N*10 DUP(?)RESULT DB (N+2) DUP(0)
3、NAME0 DB INPUT.DAT,0NAME1 DB OUTPUT.DAT,0DSEG ENDS SSEG 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,NAME0MOV CX,N*10CALL LOAD* BEGIN *LEA DI,RESULTMOV CX,0MOV DH,0 ;行MOV DL,0 ;行
4、NEXT: MOV AL,NMUL (1) MOV BX,AXMOV AL,DL(2) MOV SI, AX ;列号送 SIMOV AL, (3) BX+SIMOV DI,ALADD CL,AL(4) INC DIINC DHINC DLCMP DL, (5) JNE NEXTMOV DI,CX; * END *LEA DX,RESULTLEA SI,NAME1MOV CX,N+2CALL SAVERET START ENDP CSEG ENDS END START(分数:100.00)_三级 PC 技术机试-152 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,
5、分数:100.00)1.请编制程序,其功能是:从第 0 行第 0 列开始,依次取出 N 阶矩阵中对角线上的元素(字节型)并计算累加和(字型),然后将其存放在指定的内存区中。例如:内存中有:01H,01H,01H,02H,02H,02H,03ff,03H,03H结果为: 01H,02H,03H,06H,00H部分程序已给出,其中原始数据由过程 LOAD 从文件 INPUTDAT 中读入 SOURCE 开始的内存单元中,转换结果要求从 RESULT 开始存放,由过程 SAVE 保存到文件 OUTPUTDAT 中。请填空 BEGIN 和 END 之间已经给出的一段源程序使其完整,需填空处已经用横线标
6、出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去 BEGIN和 END 之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与 IO.OBJ 链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。【试题程序】EXTRN LOAD:FAR, SAVE:FARN EQU 10DSEG SEGMENT SOURCE DB N*10 DUP(?)RESULT DB (N+2) DUP(0)NAME0 DB INPUT.DAT,0NAME1 DB OUTPUT.DAT,0DSEG ENDS SSE
7、G 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,NAME0MOV CX,N*10CALL LOAD* BEGIN *LEA DI,RESULTMOV CX,0MOV DH,0 ;行MOV DL,0 ;行NEXT: MOV AL,NMUL (1) MOV BX,AXMOV AL,DL(2) MOV SI, AX
8、 ;列号送 SIMOV AL, (3) BX+SIMOV DI,ALADD CL,AL(4) INC DIINC DHINC DLCMP DL, (5) JNE NEXTMOV DI,CX; * END *LEA DX,RESULTLEA SI,NAME1MOV CX,N+2CALL SAVERET START ENDP CSEG ENDS END START(分数:100.00)_正确答案:(1)DH (2)MOV AH,0(3)SOURCE (4)ADC CH,0 (5)N)解析:解析本题是一道矩阵计算题,解决此类题型除了要注意数据范围、类型等方面的问题,还要对计算方法进行比较分析。本题的数据范围在题目中并没有明确给出,但从程序的数据段定义中可以看出,N 的取值为 10,即本题的程序要求计算的是 10 阶矩阵,1010100 个字节数据,共占 100 个存储单元。而需要计算的原始数据为字节数,同时累加运算结果以字的形式连续存放在对角线数据之后。题目要求首先依次取出矩阵对角线上的元素存放到结果数据区,并累加求和这些数据的和,将运算结果以字数据的形式保存到对角线元素的后面,由于对角线上的元素有一个特点就是行和列的序号是相同的,因此寻找对角线上的元素就比较容易了。