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