1、三级 PC技术机试-89 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,将内存中连续存放着的 10个无符号 16位二进制数,采用近似计算法求此 10个数的近似平方根。方法为:令某个数 X依次减去 1,3,5,7,9等奇数,一直减到差值刚刚小于等于 0为止。计算出所做的减法的次数 Y,即为该数的近似平方根。把得到结果并依次存放到内存当中。例如:内存中:0010H,0100H,0200H近似方根:0004H,0010H,0016H部分程序已经在 PROG1中给出,其中原始数据由过程 LOAD从文件 INPUT1.DAT中读入,存放
2、在 SOURCE开始的内存单元中,转换结果存放在 RESULT开始的内存单元中,并由过程 SAVE保存到文件 OUTPUT1.DAT文件中。对 BEGIN和 END之间已经给出的源程序填空,使其完整,填空处已经用横线标出,每个空白一般只需填一条指令或指令的一部分;考生也可填入功能相当的多条指令,或删去 BEGIN 和 END之间原有的代码自行编制程序完成相应的要求。对程序必须进行汇编并与 IO.OBJ连接产生可执行文件,最终运行程序产生结果(无结果和结果不正确均不得分)。部分源程序如下:EXTRN LOAD:FAR,SAVE:FARN EQU 10STACK SEGMENT DB 128 DU
3、P(?)STACK ENDSDATA SEGMENTSOURCE DW N DUP(?)RESULT DW N DUP(0)NAME0 DB INPUT1. DAT, 0NAME1 DB OUTPUT1. DAT, 0DATA ENDSCODE SEGMENTASSUME CS: CODE, DS : DATA,SS : STACKSTART PROC FARPUSH DSXOR AX, AXPUSH AXMOV AX, DATAMOV DS; AXLEA DX, SOURCELEA SI, NAMFOMOV CX, N * 2CALL LOAD*BEGIN*LEA DI, RESULTLEA
4、 SI, SOURCEMOV CX, NLOOP0: MOV AX, SIMOV BX, 0LOOP1: (1) SUB AX, BX(2) , STORE0(3) IMP LOOP1 STOREO: INC BX (4) MOV DI, BXINC DI(5) INC SI(6) , LOOP LOOP0 *END* LEA DX, RESULTLEA SI, NAME1MOV CX, N * 2CALL SAVERETSTART ENDPCODE ENDSEND START相关知识:循环程序设计利用重复控制指令可以实现重复操作,能简化程序、节约存储空间。循环程序分为三部分:初始化部分为循环
5、做准备;循环控制部分判断循环条件是否满足,是否继续循环操作;循环体部分完成要循环操作的具体工作。对于复杂问题,单重循环程序往往不能满足要求,循环中常常还需要有其他循环程序。值得注意的是内层循环和外层循环之间应有各自的控制条件,当从外层循环进入到内层循环时,内层循环的初始条件应该重新设置。(1)无条件循环指令格式:LOOP DST该指令的功能是,程序执行到此处,CX 的内容减 1,若 CX的内容不为 0,则转到目标地址处继续执行指令,否则执行该指令的下一条指令。(2)条件循环指令(I)格式:LOOPZ/LOOPE DST该指令执行后,如果零标志位为 1,且 CX内容减 1后不等于 0,则转移到目
6、标地址处继续执行指令,否则执行循环指令后的一条指令,即零标志位为 0或 CX内容为 0时退出循环。(ii)格式:LOOPNZLOOPNE DST该指令执行时,CX 内容减 1,然后根据零标志位和 CX内容决定是否循环。若零标志位为 1,或 CX内容为0时退出循环,否则零标志位等 0且 CX内容不等于 0,则转移到转移指令的目标地址处继续执行。编程思路:第一步:分析程序要求的功能。本程序需要完成以下功能:(1)从数据文件 INPUT1.DAT中读取 10个 16位无符号整数存放在 SOURCE开始的内存单元中。(2)将 SOURCE开始的 10个字单元中的无符号整数,利用减奇数的方法求近似方根,
7、并将结果存放在RESULT开始的内存单元中。(3)将方根结果存放在 OUTPUT1.DAT中。第二步:用相应的汇编程序来实现其功能。(1)数据的读取和存入文件的实现,题目中已经给出。(2)对于一个数的方根近似求解,题目中叙述了具体的实现方法,VCB 依次减 1,3,5直至差小于等于0,求差次数即为方根。通过阅读题目中的汇编源代码,我们可以看出,将内存中的数读入 AX,然后循环减 BX 中的内容。这样我们可判断出减数 1,3,5是存放在 BX中的,BX 的初始值为 1,每执行完一次减操作,BX 的内容就应该加 2。我们始终没有发现哪一个寄存器是用来计数进行减操作次数的,可实际上 BX的内容与减操
8、作的次数是有关的,减操作的次数为(BX)+1)2。观察出这些特征后,我们就可容易填出空格处的答案了。(分数:100.00)_三级 PC技术机试-89 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.请编制程序,将内存中连续存放着的 10个无符号 16位二进制数,采用近似计算法求此 10个数的近似平方根。方法为:令某个数 X依次减去 1,3,5,7,9等奇数,一直减到差值刚刚小于等于 0为止。计算出所做的减法的次数 Y,即为该数的近似平方根。把得到结果并依次存放到内存当中。例如:内存中:0010H,0100H,0200H近似方根:0004H,0
9、010H,0016H部分程序已经在 PROG1中给出,其中原始数据由过程 LOAD从文件 INPUT1.DAT中读入,存放在 SOURCE开始的内存单元中,转换结果存放在 RESULT开始的内存单元中,并由过程 SAVE保存到文件 OUTPUT1.DAT文件中。对 BEGIN和 END之间已经给出的源程序填空,使其完整,填空处已经用横线标出,每个空白一般只需填一条指令或指令的一部分;考生也可填入功能相当的多条指令,或删去 BEGIN 和 END之间原有的代码自行编制程序完成相应的要求。对程序必须进行汇编并与 IO.OBJ连接产生可执行文件,最终运行程序产生结果(无结果和结果不正确均不得分)。部
10、分源程序如下:EXTRN LOAD:FAR,SAVE:FARN EQU 10STACK SEGMENT DB 128 DUP(?)STACK ENDSDATA SEGMENTSOURCE DW N DUP(?)RESULT DW N DUP(0)NAME0 DB INPUT1. DAT, 0NAME1 DB OUTPUT1. DAT, 0DATA ENDSCODE SEGMENTASSUME CS: CODE, DS : DATA,SS : STACKSTART PROC FARPUSH DSXOR AX, AXPUSH AXMOV AX, DATAMOV DS; AXLEA DX, SOUR
11、CELEA SI, NAMFOMOV CX, N * 2CALL LOAD*BEGIN*LEA DI, RESULTLEA SI, SOURCEMOV CX, NLOOP0: MOV AX, SIMOV BX, 0LOOP1: (1) SUB AX, BX(2) , STORE0(3) IMP LOOP1 STOREO: INC BX (4) MOV DI, BXINC DI(5) INC SI(6) , LOOP LOOP0 *END* LEA DX, RESULTLEA SI, NAME1MOV CX, N * 2CALL SAVERETSTART ENDPCODE ENDSEND STA
12、RT相关知识:循环程序设计利用重复控制指令可以实现重复操作,能简化程序、节约存储空间。循环程序分为三部分:初始化部分为循环做准备;循环控制部分判断循环条件是否满足,是否继续循环操作;循环体部分完成要循环操作的具体工作。对于复杂问题,单重循环程序往往不能满足要求,循环中常常还需要有其他循环程序。值得注意的是内层循环和外层循环之间应有各自的控制条件,当从外层循环进入到内层循环时,内层循环的初始条件应该重新设置。(1)无条件循环指令格式:LOOP DST该指令的功能是,程序执行到此处,CX 的内容减 1,若 CX的内容不为 0,则转到目标地址处继续执行指令,否则执行该指令的下一条指令。(2)条件循环
13、指令(I)格式:LOOPZ/LOOPE DST该指令执行后,如果零标志位为 1,且 CX内容减 1后不等于 0,则转移到目标地址处继续执行指令,否则执行循环指令后的一条指令,即零标志位为 0或 CX内容为 0时退出循环。(ii)格式:LOOPNZLOOPNE DST该指令执行时,CX 内容减 1,然后根据零标志位和 CX内容决定是否循环。若零标志位为 1,或 CX内容为0时退出循环,否则零标志位等 0且 CX内容不等于 0,则转移到转移指令的目标地址处继续执行。编程思路:第一步:分析程序要求的功能。本程序需要完成以下功能:(1)从数据文件 INPUT1.DAT中读取 10个 16位无符号整数存
14、放在 SOURCE开始的内存单元中。(2)将 SOURCE开始的 10个字单元中的无符号整数,利用减奇数的方法求近似方根,并将结果存放在RESULT开始的内存单元中。(3)将方根结果存放在 OUTPUT1.DAT中。第二步:用相应的汇编程序来实现其功能。(1)数据的读取和存入文件的实现,题目中已经给出。(2)对于一个数的方根近似求解,题目中叙述了具体的实现方法,VCB 依次减 1,3,5直至差小于等于0,求差次数即为方根。通过阅读题目中的汇编源代码,我们可以看出,将内存中的数读入 AX,然后循环减 BX 中的内容。这样我们可判断出减数 1,3,5是存放在 BX中的,BX 的初始值为 1,每执行完一次减操作,BX 的内容就应该加 2。我们始终没有发现哪一个寄存器是用来计数进行减操作次数的,可实际上 BX的内容与减操作的次数是有关的,减操作的次数为(BX)+1)2。观察出这些特征后,我们就可容易填出空格处的答案了。(分数:100.00)_正确答案:(INC BX(2) JNA(3) INC BX(4) SHR BX, 1(5) INC DI(6) INC SI)解析:
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1