请编制程序,其功能是:内存中连续存放着20个无符号字节数序列,请将它们排成升序(从小到大)。 例如: 内存中有01H,04H,02H…(假设后17个字节均大与04H) 结果为 01H,02H,04H…(后跟17个字节,按从小到大的顺

admin2010-12-14  41

问题 请编制程序,其功能是:内存中连续存放着20个无符号字节数序列,请将它们排成升序(从小到大)。
   例如:
   内存中有01H,04H,02H…(假设后17个字节均大与04H)
   结果为    01H,02H,04H…(后跟17个字节,按从小到大的顺序排列)
   部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
   请填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并白行编程来完成所要求的功能。
   对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。
   试题程序:

选项

答案(1)INC DI (2)NEXT0 (3)N-1 (4)SB (5)NEXT3 (6)AL (7)NEXT2 (8)BX (9)NEXT1

解析 此程序是用冒泡排序法实现一个含20个无符号数的序列的升序排序的功能。冒泡排序方法为:将第一个数据与相邻的数进行比较,若次序不对,两数交换位置。依次类推,直至第N-1个数和第N个数进行过比较为止。上述过程称为第一趟冒泡排序。第一趟冒泡排序经过N-1次比较后,最大的数已经到了数组尾,第二趟仅需比较N-2次比较就够了,一共比较N-1趟就完成了排序。这样共有两重循环:CX是内循环次数,而BX是外循环次数。
   程序的堆栈段定义了一个128字节的堆栈区.堆栈段下面是数据段.数据段中定义了四个字节型变量:原始数据区SOURCE、结果数据区RESULT、原始数据文件名NAME0、结果数据文件名NAMEI。数据段下面是代码段,告诉汇编程序,代码段。数据段和堆栈段分别属于段寄存器CS、DS,SS。
   先将原始数据的偏移地址装入到SI中,结果数据存放的偏移地址装入到DI中。CX赋初值为N,用于控制循环处理的次数。
   NEXT0段,将SI中内容送AL,再将AL存入到DI中。然后SI地址加1,DI地址加1。所以第(1)空填写"INC DI"。继续取数据AL,存数据,从入口处NEXT0循环。所以第(2)空填写"NEXT0"。CLD指令是将方向标志DF清0,在数据操作时,实现地址指针自动增量。第(3)空是给BX赋初值N-1。因为外循环需要比较N-1趟。
   NEXT1段,将结果数据地址装入到SI中,BC赋值给CX。
   NEXT2段,是开始做一趟内的比较。第(4)空是考查LODSB指令,是将SI作为地址指针中的数据装入到AI中,同时修改SI,SI地址加1,指向下一个元素。将AL与下一元素[SI]做比较,若[SI]大于等于AL,则转向NEXT3;否则,将AL与[SI]交换。第(5)、(6)空分别填写"NEXT3","AL"。AL与[SI]交换后,再将送[SI-1)中。
   NEXT3段,当完成一趟内的相邻两个数的比较后,从NEXT2入口处循环,在该趟内,将AL继续与其他数的比较。所以第(7)空填写"NEXT2"。每次完成一趟比较,BX应减1,若BX不为0,则继续进行外循环,进行第二趟比较,循环入口处是NEXT1。所以第(8)空和第(9)空分别填写"BX","NEXT1"。
转载请注明原文地址:https://kaotiyun.com/show/TdgZ777K
0

随机试题
最新回复(0)