全国计算机等级三级PC技术上机试练习习题(16)
来源:优易学  2010-1-14 15:29:22   【优易学:中国教育考试门户网】   资料下载   IT书店

  第16套上机试题及答案详解
  编制一个程序,其功能是:计算内存中连续存放的20个字节无符号数据的相邻两个数据之间的和,并找出和的最大值,和的最大值存放在结果的最后一个字单元,和为字数据。
  例如:
  内存中有:20H,04H,58H,34H,35H,4DH……,
  则结果为:0024H,008CH,0082H……
  部分程序已经给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入以SOURCE开始的内存单元中。运算结果要求从RESULT开始的内存单元存放,由过程SAVE保存到文件OUTPUT.DAT中。
  请填空BEGIN和END之问已给出的源程序使其完整,空白已经用横线标出,每行空白一般只需要一条指令,但采用功能相当的多条指令也行,考生也可以删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
  对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。
  【试题程序】
  
  

  【参考答案】
  (1)MOV AX.0
  (2)2
  (3)ADD DI,2
  (4)JAE NEXT
  (5)MOV[SI+2],AX
  【解析】
  从程序的整体结构可以看出程序首先进行的是求和运算,并将结果存入从RESULT开始的存储单元中。求和结束以后,再求RESULT中数据的最大值。
  第一个循环AGAINO用来对SOURCE中相邻的数据求和,并存入RESULT中。为了使上一次的相加结果不影响后面的运算,需要在每一次进入循环的时候将AX寄存器清零,因此第一个空白处应该填写的内容为MOV AX,O(或XOR AX,AX或SUB AX,AX)。本程序的加法运算过程中,指针的变化要特别注意。由于是对相邻两个数据进行求和,所以尽管SOURCE中的数据是字节类型,但由于一次操作需要使用两个数据,所以sl指针的变化每次应该是2,也就是说一次加法使用两个数据以后,下一次要从第三个数据开始,所以第二个空白处应填2。指向RESULT的指针也要变化,由于RESULT是字类型,因此指针的变化也应该是2,所以第三个空白处应该是DI增加2,即ADD DI,2。
  寻找最大值采用的算法是逐个比较法,即将存储单元中的第一个数取到AX寄存器中,然后逐个与存储单元的内容进行比较,如果AX寄存器中的数据大,则进行下一次比较,否则将存储单元中的内容传送到AX中,这样在比较结束时,AX中的内容便是这一组数中的最大值。在程序中,首先将用来控制循环次数的内容送到BX寄存器中,然后将存储单元的偏移地址送到寄存器sl中。将第一个数据取入AX寄存器后,便开始比较,显然第四个空白处应该填写的内容是一个跳转语句,从下面MOV AX,[SI]可以知道跳转的条件应该是AX中的数据大于[SI]中的数据,所以应使用JAE指令。由于需要修改指针并且判断比较是否结束,因此应该跳转到NEXT处,即第四个空白处的程序是JAE NEXT。最后一个语句实现的是将最大值存入RESULT的最后一个存储单元,由于在比较时,SI已经指到了RESULT中的最后一个数据,所以只需要将指针SI再加2就指向了RESULT的最后一个存储单元,即第五个空应填的内容为MOV[SI+2],Ax。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训