请编制程序,其功能是:内存中连续存放着16个12位无符号二进制数DB11DB10…DB0,其存放格式均为 DB11 DB10 DB9 DB8 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 请判别

admin2010-12-14  17

问题 请编制程序,其功能是:内存中连续存放着16个12位无符号二进制数DB11DB10…DB0,其存放格式均为
   DB11 DB10 DB9 DB8 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0  0  0  0  0
  
   请判别这16个12位二进制数是否大于800H:若大于800H,则相应地在内存中存入01H;否则,存入00H。最后存放这16个12位二进制数中大于800H的数的个数n(n用一个字节表示)。
   例如:
   内存中有12H,30H,84H,50H,80H,00H…
   结果为    00H,01H,00H…(共16个字节),后跟n
   部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
   请填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
   对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。
   试题程序:
     

选项

答案(1)OFFSET RESULT (2)8000H (3)C 0 (4)CL

解析 此程序要求实现的功能是:内存中连续存放着16个12位无符号二进制数DB11DB10…DB0),它们的存放格式均为
   DB11DB10DB9DB8DB7DB6DB5DB4    DB3DB2DB1DB0 0  0  0  0
   
   先判别这16个12位二进制数是否大于800H;若大于800H,则相应地在内存中存入01H;否则,存入00H。最后存放这16个12位二进制数中大于800H的数的个数n,n用一个字节表示。
   程序的堆栈段定义了一个128字节的堆栈区。堆栈段下面是数据段。数据段中定义了四个字节型变量:原始数据区SOURCE、结果数据区RESULT、原始数据文件名NAME0、结果数据文件名NAME1。数据段下面是代码段,告诉汇编程序,代码段、数据段和堆栈段分别属于段寄存器CS、DS、SS。
   先将一些寄存器赋值:CH赋值为N,用于控制循环处理的次数;CL赋初值为00H,CL用于统计大于800H的数的个数;原始数据偏移地址BX赋初值为0;DX赋值为0100H,其中DL为00H,DH为01H。结果数据偏移地址送DI,所以第(1)空填写"OFFSETRESULT"。
   PRO段,先判断16个12位二进制数是否大于800H,再将01H或00H存到内存中,最后存放这16个12位二进制数中大于800H的数的个数n。将BX中的内容送AH中,BX+I中的内容送AL.将AX与 8000H做比较,即将这12位二进制数与800H做比较,若、X小于等于8000H,则转向C 0处执行;否则,AX大于800H,则将DH即01H存入到DI中。接着,CL加1,CL用于统计大于800H的数的个数。然后DI地址加1,准备存储下一个00H或01H。再无条件转向JUMP段。所以第(2)空填写"8000H",第(3)空填写"C 0"。
   C 0段,是当AX小于等于8000H时,即该12位二进制数小于800H,则将DL即00H存入到DI中。然后DI地址加1。
   JUMP段,原始数据的偏移地址BX加2,准备取下一个12位无符号二进制数.每次处理完一个12位无符号二进制数时,CH减1,若CH不等于0,则转向PRO段,继续处理下一个12位无符号二进制数;否则,CH=0,说明16个数都已经处理完了。然后将大于800H的个数n即CL存入到DI中。所以第(4)空填写"CL"。
转载请注明原文地址:https://kaotiyun.com/show/FdgZ777K
0

最新回复(0)