s7-200PLC冒泡法排序
- 格式:doc
- 大小:30.00 KB
- 文档页数:4
实验内容:之答禄夫天创作用“冒泡“法对一组数300, 250, 280, 240, 260, 按从小到年夜的顺序排列.实验要求:1.编制法式, 对这组数进行排序, 并输出原数据及排序后数据;2.利用DEBUG调试工具, 用D0命令, 检查排序前后, 内存数据的变动;3. 去失落最年夜和最小的两个值, 求出其余值的平均值, 并输出最年夜值, 最小值和平均值;4. 用学过的压栈PUSH和出栈POP指令, 将平均值按位逐个输出(即输出263);5.将平均值263转化为二进制串, 并将这组二进制串输出.6.所有数据输出前要用字符串的输出指令, 进行输出提示(如:zui da zhi shi : 300等), 所有数据结果能清晰地显示在屏幕上.法式代码:DATA SEGMENT ;界说数据段DT1 DW 300,250,280,240,260DT2 DB 'what five data input is',0DH,0AH,'$'DT3 DB 'what after rank is',0DH,0AH,'$'DT4 DB 'The max is',0DH,0AH,'$'DT5 DB 'The min is',0DH,0AH,'$'DT6 DB 'The average is',0DH,0AH,'$'DT7 DB 'show you the average one by one',0DH,0AH,'$'DT8 DB 'show you the average in binary form',0DH,0AH,'$'DT9 DB 0DH,0AH,'$'DT0 DB 'B',0DH,0AH,'$'N EQU 5DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA;说明代码段、数据段STAT:MOV AX,DATAMOV DS,AXLEA DX,DT2;输出字符串MOV AH,09HINT 21HCALL ZIXU;调用数据输出过程对数据进行排序:MOV CX,N-1;设置N-1轮比力次数MOV DX,1;比力轮次技术JM4:PUSH CXMOV CX,NSUB CX,DXLEA SI,DT1JM3:MOV AX,[SI]CMP AX,[SI+2]JLE JM2XCHG AX,[SI+2]XCHG AX,[SI]JM2:ADD SI,2LOOP JM3POP CXINC DXLOOP JM4输出排序后的顺序:LEA DX,DT3MOV AH,09HCALL ZIXU输出最年夜值:LEA DX,DT4MOV AH,09HINT 21HLEA SI,DT1+8;排序后最后一个数就是最年夜值MOV AX,[SI]CALL ZIXU1输出最小值:LEA DX,DT5MOV AH,09HINT 21HLEA SI,DT1;排序后第一个数就是最小值MOV AX,[SI]CALL ZIXU1输出平均值:LEA DX,DT6MOV AH,09HLEA SI,DT1+2;去失落最年夜最小后的数求和MOV AX,[SI]ADD AX,[SI+2]ADD AX,[SI+4]MOV BX,3MOV DX,0DIV BX;求其平均值MOV CX,AXCALL ZIXU1;调用输出法式输出把平均值分三位输出:LEA DX,DT7MOV AH,09HINT 21HMOV AX,CXMOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,AL;输出平均值的第一位MOV AH,2INT 21HLEA DX,DT9;换行MOV AH,09HINT 21HPOP DXMOV AX,DXMOV BX,10MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,AL;输出平均值的第二位MOV AH,2INT 21HLEA DX,DT9;换行MOV AH,09HINT 21HPOP DXADD DX,30HMOV AH,2;输出平均值的第三位INT 21HLEA DX,DT9MOV AH,09HINT 21H;以二进制位输出平均值LEA DX,DT8MOV AH,09HINT 21HMOV BX,CXMOV CX,16JM5:MOV DX,0SAL BX,1RCL DX,1ADD DX,30H MOV AH,02HINT 21H DEC CXJNZ JM5LEA DX,DT0MOV AH,09HINT 21HMOV AH,4CH;返回DOSINT 21H;数据序列的输出写成一个过程:ZIXU PROCMOV CX,5LEA SI,DT1JM1:MOV AX,[SI]MOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALINT 21H POP DX MOV AX,DX MOV BX,10 MOV DX,0 DIV BX PUSH DX ADD AL,30H MOV DL,AL MOV AH,2 INT 21H POP DX ADD DX,30H MOV AH,2 INT 21H LEA DX,DT9 MOV AH,09H INT 21HLOOP JM1RETZIXU ENDP;当个数据输出过程:ZIXU1 PROC;将数据的输出写成一个过程MOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXMOV AX,DXMOV BX,10MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXADD DX,30HMOV AH,2INT 21HLEA DX,DT9MOV AH,09HINT 21HRETZIXU1 ENDPCODE ENDSEND STAT调试中呈现的一些问题:1.输入时失慎将字母O当数字0输入, 结果招致了下面第5行提示的毛病.2.由于年夜意将循环标号表错位置, 使得呈现无限输出的状态.3.在不应有标点的处所毛病的点了标点符号.4.在写数据输出的法式时, 存在逻辑毛病, 在最高位输出后, 本应该将AH清零, 将保管的余数送入AL后继续除, 但我第一次恰巧相反, 结果呈现毛病.下面是一些毛病的提示:经过屡次修改和调试, 终于能够胜利运行, 下面是运行结果:实验总结:通过实验使得我对这门课有了更深条理的认识, 也激发了我对这门课的兴趣, 通过编写法式、运行法式, 不单可以巩固以前学过的知识, 而且学到了很多在书本山没有的知识.以前对编程工具及其实验一点也不了解, 通过两次的实验课, 我已经有了一定的掌握.我发现, 要学好一门语言最好的方法是去用它, 只有在使用的过程中, 那些苦涩生硬的指令以及语句才会变得鲜活起来, 经过屡次的使用后, 我们不用再去刻意记那些指令的功能, 就已经能够很好的掌握和应用了.在实验过程中, 相互讨论也是一年夜乐趣, 年夜家可以提出自己的想法, 然后相互讨论, 在进行编程调试, 再加上老师的指导, 简直是一个相互提高的好方法, 可以很快而且高效的提高自己的水平.。
冒泡法排序算法讲解冒泡排序是一种简单但效率较低的排序算法。
它的基本思想是通过不断地比较和交换相邻的元素,使得较大的(或较小的)元素逐渐“冒泡”到数组的一端。
以下是一个详细的冒泡排序算法讲解:1. 算法原理:冒泡排序的过程可以形象地比喻为水中的气泡向上冒的过程。
在数组中,我们希望将较大的元素“冒泡”到数组的高索引位置,较小的元素沉到底部。
算法通过重复遍历待排序的数组,每次遍历时都会对相邻的元素进行比较。
如果前一个元素比后一个元素大(如果是升序排序,反之则为降序排序),那么就交换这两个元素的位置。
这个过程会一直持续到没有任何一对相邻的元素需要交换为止,这意味着数组已经完全排序。
2. 算法步骤:假设我们有一个包含n个元素的数组。
我们需要进行n-1轮遍历。
在每一轮中,我们会从数组的第一个元素开始,比较每一对相邻的元素。
如果当前元素大于下一个元素,我们就交换它们的位置。
这一轮遍历结束后,最大的元素将会被“冒泡”到数组的末尾。
对于下一轮遍历,我们只需要对剩下的n-1个元素进行相同的比较和交换操作。
我们重复这个过程,直到完成所有轮次的遍历。
3. 程序实现(以Java为例):public class BubbleSortDemo {public static void main(String[] args) {int[] arr = {5, 3, 8, 2, 1};int temp;for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}// 输出排序后的数组for (int num : arr) {System.out.print(num + " ");}}}在这个示例中,外层的循环控制了需要进行的轮数,内层的循环则负责每轮的元素比较和交换。
实验一:冒泡法排序实验一、实验要求实验目的:掌握控制转移指令的功能,以及冒泡法排序的原理。
实验要求:设 30H 开始的 10 个储存单元中,寄存的是无符号数,编写程序实现: 10 个数排序,寄存在 50H 开始的单元中。
二、实验原理多重循环即循环嵌套构造。
多重循环程序的设计方法和单重循环是同样的,不过要分别考虑各重循环的控制条件。
内循环属于外循环体重的详细办理部分。
在多重嵌套中,不同意各个循环体互相交错,也不同意从外循环跳入内循环,不然编译时会犯错。
应当注意每次经过外循环进入内循环式,内循环的初始条件需要重置。
三、程序设计1、程序流程图开始R4 ←外循环次数R3 ←内循环次数R0 ←缓冲区首地点B←((R0))A ←((R0)+1)(A)≥(B)?N ((R0)) ←→ ((R0)+1)R0←(R0)+1(R3)-1=0?Y(R4)-1=0?YR0←30HR1←31H((R1)) ←((R0)) ((R0)) ←((R0)+1) ((R1)) ←((R1)+1)(R7)-1=0?Y结束YNNN图 1 冒泡法程序流程图2、程序代码N EQU 10TAB EQU 30HORG 0000HMOV 30H, #1 ;在 30H 中输入 10 个随机数MOV 31H, #3MOV 32H, #2MOV 33H, #4MOV 34H, #6MOV 35H, #8MOV 36H, #7MOV 37H, #11MOV 38H, #9MOV 39H, #10SORT: MOV R4, #N-1LOOP1: MOV A,R4 ;冒泡法循环MOV R3, AMOV @R0, #TABLOOP2: MOV A, @R0MOV B, AINC R0MOV A, @R0CLR CMOV R2, ASUBB A, BJNC UNEXCHMOV A, R2UNEXCH: DJNZ R3, LOOP2 ;假如 A<B ,次序履行 UNEXCH DJNZ R4, LOOP1LJMP SWITCHEXCH: DEC R0 ;假如 A>B ,则 A,B 调动地点XCH A, @R0INC R0MOV @R0, ASWITCH: MOV R0, #30HMOV R1, #50HMOV R2, #NPAIXU: MOV A, @R0 ;将 30H 中排好的数挪动到50H 中MOV @R1, AINC R0INC R1DEC R2CJNE R2, #0, PAIXUSJMP $END四、程序考证1、在30H中输入10个数,显示以下:图 2 30H 单元中储存的10 个数2、对30H中的10个数排序,结果以下:图 3 对 30H 中 10 个数排序后的结果3、将30H中的数转移到50H 中,结果以下:图 4 30H 中 10 个数转移到50H 以后的结果结论:程序基本切合实验要求。
实验内容:用“冒泡“法对一组数300,250,280,240,260,按从小到大的顺序排列。
实验要求:1、编制程序,对这组数进行排序,并输出原数据及排序后数据;2、利用DEBUG调试工具,用D0命令,查瞧排序前后,内存数据的变化;3、去掉最大与最小的两个值,求出其余值的平均值,并输出最大值,最小值与平均值;4、用学过的压栈PUSH与出栈POP指令,将平均值按位逐个输出(即输出263);5.将平均值263转化为二进制串,并将这组二进制串输出。
6、所有数据输出前要用字符串的输出指令,进行输出提示(如:zui da zhi shi : 300等),所有数据结果能清晰地显示在屏幕上。
程序代码:DATA SEGMENT ;定义数据段DT1 DW 300,250,280,240,260DT2 DB 'what five data input is',0DH,0AH,'$'DT3 DB 'what after rank is',0DH,0AH,'$'DT4 DB 'The max is',0DH,0AH,'$'DT5 DB 'The min is',0DH,0AH,'$'DT6 DB 'The average is',0DH,0AH,'$'DT7 DB 'show you the average one by one',0DH,0AH,'$'DT8 DB 'show you the average in binary form',0DH,0AH,'$'DT9 DB 0DH,0AH,'$'DT0 DB 'B',0DH,0AH,'$'N EQU 5DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA ;说明代码段、数据段STAT: MOV AX,DATAMOV DS,AXLEA DX,DT2 ;输出字符串MOV AH,09HINT 21HCALL ZIXU ;调用数据输出过程对数据进行排序:MOV CX,N-1 ;设置N-1轮比较次数MOV DX,1 ;比较轮次技术JM4:PUSH CXMOV CX,NSUB CX,DXLEA SI,DT1JM3:MOV AX,[SI]CMP AX,[SI+2]JLE JM2XCHG AX,[SI+2]XCHG AX,[SI]JM2:ADD SI,2LOOP JM3POP CXINC DXLOOP JM4输出排序后的顺序:LEA DX,DT3MOV AH,09HINT 21HCALL ZIXU输出最大值:LEA DX,DT4MOV AH,09HINT 21HLEA SI,DT1+8 ;排序后最后一个数就就是最大值MOV AX,[SI]CALL ZIXU1输出最小值:LEA DX,DT5MOV AH,09HINT 21HLEA SI,DT1 ;排序后第一个数就就是最小值MOV AX,[SI]CALL ZIXU1输出平均值:LEA DX,DT6MOV AH,09HLEA SI,DT1+2 ;去掉最大最小后的数求与MOV AX,[SI]ADD AX,[SI+2]ADD AX,[SI+4]MOV BX,3MOV DX,0DIV BX ;求其平均值MOV CX,AXCALL ZIXU1 ;调用输出程序输出把平均值分三位输出:LEA DX,DT7MOV AH,09HINT 21HMOV AX,CXMOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,AL ;输出平均值的第一位MOV AH,2INT 21HLEA DX,DT9 ;换行MOV AH,09HINT 21HPOP DXMOV AX,DXMOV BX,10MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,AL ;输出平均值的第二位MOV AH,2INT 21HLEA DX,DT9 ;换行MOV AH,09HPOP DXADD DX,30HMOV AH,2 ;输出平均值的第三位I NT 21HLEA DX,DT9MOV AH,09HINT 21H;以二进制位输出平均值LEA DX,DT8MOV AH,09HINT 21HMOV BX,CXMOV CX,16JM5:MOV DX,0SAL BX,1RCL DX,1ADD DX,30HMOV AH,02HINT 21H DEC CXJNZ JM5LEA DX,DT0MOV AH,09HINT 21HMOV AH,4CH ;返回DOSINT 21H;数据序列的输出写成一个过程:ZIXU PROCMOV CX,5LEA SI,DT1JM1:MOV AX,[SI]MOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALINT 21HPOP DXMOV AX,DXMOV BX,10MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXADD DX,30HMOV AH,2INT 21HLEA DX,DT9MOV AH,09HINT 21HADD SI,2LOOP JM1RETZIXU ENDP;当个数据输出过程:ZIXU1 PROC ;将数据的输出写成一个过程MOV BX,100MOV DX,0DIV BXPUSH DXADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXMOV AX,DXMOV BX,10MOV DX,0DIV BXADD AL,30HMOV DL,ALMOV AH,2INT 21HPOP DXADD DX,30HMOV AH,2INT 21HLEA DX,DT9MOV AH,09HINT 21HRETZIXU1 ENDPCODE ENDSEND STAT调试中出现的一些问题:1.输入时不慎将字母O当数字0输入,结果导致了下面第5行提示的错误。
块:主作者:创建时间:2005.04.28 11:24:04 修改时间:2018.04.07 23:32:50符号变量类型数据类型注释 TEMP TEMP TEMPTEMP请注意,这里的数据操作均为字整型,不支持浮点数,要支持浮点数,需要修改冒泡排序程序网络 1网络一和网络2用于构造一个0.5秒的时钟脉冲/TONIN10 msPT M11.0T1005网络 2T100M11.0网络 3网络3和网络4用于组成一个向左移动5次的功能,即V0.0,V0.1,V0.2,V0.3,V0.4依次ON,然后利用这5个点的ON来对输入的数据进行采样,采样5次MOV_BENOENOUT IN SM0.11VB0块:冒泡法作者:创建时间:2005.04.28 11:24:20 修改时间:2018.04.07 23:32:50符号变量类型数据类型注释 ENIN BOOL LD0Start_Addr IN DWORD LD4Number IN DWORD IN IN_OUT OUT TEMP TEMP TEMP TEMPTEMP冒泡法--------------把A[0],A[1]......A[J]从小到大进行排序注:排序数为字整数,即VW##,如:VW100,VW102,VW104等LD40---------------------------变量I LD50---------------------------变量J LD10------------------------------N-1初始化I=0,J=0网络 1MOV_DWENOENOUT IN MOV_DW ENOENOUT IN SUB_DI ENOENOUT IN1IN2SM0.00LD400LD50#Numb er:LD41LD10网络 2LBLJ=I+1网络 3ADD_DIENOENOUT IN1IN2SM0.0LD401LD50网络 4LBL1A[I] > A[J] ?网络 5MUL_DIENOENOUT IN1IN2MUL_DI ENOENOUT IN1IN2ADD_DI ENOENOUT IN1IN2ADD_DI ENOENOUT IN1IN2SM0.0LD40+2LD12LD50+2LD16LD12#Start_Addr:LD0AC1LD16#Start_Addr:LD0AC2网络 6>=I NOTJMP*AC1*AC22A[I],A[J]进行交换网络 7MOV_WENOENOUT IN MOV_W ENOENOUT IN MOV_W ENOENOUT IN SM0.0*AC1LW24*AC2*AC1LW24*AC2网络 8LBL2J++网络 9INC_DWENOENOUT IN SM0.0LD50LD50J=N?网络 10==D NOTJMPLD50#Number:LD41I++网络 11INC_DWENOENOUT IN SM0.0LD40LD40I=N-1?网络 12==D NOTJMPLD40LD10。
冒泡排序的排序原理和算法冒泡排序是一种简单且常用的排序算法,它的原理很简单,即通过相邻元素之间的比较和交换来实现排序。
冒泡排序的算法也很容易理解和实现,是初学者学习排序算法的重要一步。
冒泡排序的原理是通过不断地比较相邻的元素,如果前面的元素大于后面的元素,则交换它们的位置,这样每一轮比较都会将最大的元素“冒泡”到最后。
经过n-1轮的比较和交换后,就可以得到一个有序的数列。
具体来说,冒泡排序的算法步骤如下:1. 首先,比较相邻的两个元素,如果前面的元素大于后面的元素,则交换它们的位置;2. 继续比较下一对相邻元素,重复上述的比较和交换操作;3. 重复执行步骤2,直到最后一对相邻元素进行比较为止;4. 重复执行步骤1到步骤3,直到所有元素都排序完成。
冒泡排序的时间复杂度是O(n^2),其中n是待排序数列的长度。
这是因为冒泡排序的每一轮比较都需要扫描所有的元素,总共需要进行n-1轮比较,每一轮比较需要进行n次操作。
冒泡排序的优点是原理简单,易于理解和实现。
但是由于它的时间复杂度较高,在处理大规模数据时效率较低。
因此,在实际应用中,冒泡排序往往不是第一选择,更常用的是快速排序、归并排序等更高效的排序算法。
冒泡排序的应用场景相对较少,一般用于对小规模数据进行排序。
它的主要优点是代码简单易懂,适合初学者学习和理解排序算法的原理。
除此之外,在某些特定的场景下,冒泡排序也可以发挥一定的作用。
总结一下,冒泡排序是一种简单但效率较低的排序算法。
它的原理是通过相邻元素的比较和交换来实现排序,时间复杂度为O(n^2)。
冒泡排序适用于小规模数据的排序,但在处理大规模数据时效率较低。
了解冒泡排序的原理和算法对于学习和理解排序算法有一定的帮助,同时也为后续学习更高效的排序算法打下基础。
排序:2.冒泡法排序冒泡法排序的基本思想是:每次将待排序的序列中的记录两两比较,凡是逆序则进行交换。
将序列照此方法从头至尾处理一遍称为一次冒泡。
第一次冒泡的效果是将关键字值最大(或最小)的记录交换到了序列的最后(或最前)位置,第二次冒泡的效果是将关键字值第二大(或第二小)的记录交换到了序列的最大值前边(或最小值后边)。
若某一次冒泡过程中没有发生交换,则排序结束。
冒泡排序法的比较次数与交换次数相同,容易编程,排序较慢。
[例]:用冒泡排序法将数值序列9,8,3,5,6,2,7,1,4按升序排列。
分析排序过程如下(将未排好序的数括在[ ]中):初始状况:[9 8 3 5 6 2 7 1 4] 相邻的数两两比较大小,若第一个数大于第二个数,则交换位置:第一次比较大小:[8 9 3 5 6 2 7 1 4] 再比较大小,进行交换第二次比较大小:[8 3 9 5 6 2 7 1 4]第三次比较大小:[8 3 5 9 6 2 7 1 4]第四次比较大小:[8 3 5 6 9 2 7 1 4]第五次比较大小:[8 3 5 6 2 9 7 1 4]第六次比较大小:[8 3 5 6 2 7 9 1 4]第七次比较大小:[8 3 5 6 2 7 1 9 4]第八次比较大小:[8 3 5 6 2 7 1 4 9] 则得到第一次交换结果:第一次交换后:[8 3 5 6 2 7 1 4] 9第九次比较大小:[3 8 5 6 2 7 1 4] 9第十次比较大小:[3 5 8 6 2 7 1 4] 9第十一次比较大小:[3 5 6 8 2 7 1 4] 9第十二次比较大小:[3 5 6 2 8 7 1 4] 9第十三次比较大小:[3 5 6 2 7 8 1 4] 9第十四次比较大小:[3 5 6 2 7 1 8 4] 9第十五次比较大小:[3 5 6 2 7 1 4 8] 9 得到第二次交换后结果:第二次交换后:[3 5 6 2 7 1 4] 8 9第三次交换后:[3 5 2 6 1 4] 7 8 9 注意这里与第二次交换后的不同。
一、冒泡法---封装库(别人写的)主程序:请注意,这里的数据操作均为字整型,不支持浮点数,要支持浮点数,需要修改冒泡排序程序.Network 1// 假设原始数据放在VW50,那么通过不同的时间片,将这个原始数据放在VW100------VW108,LD SM0.1MOVW VW50, VW100MOVW VW52, VW102MOVW VW54, VW104MOVW VW56, VW106MOVW VW58, VW108Network 2 // 网络标题// 对VW100----VW108的数据进行排序,去掉最大值和最小值,只取中间三个样本LD M0.0EUCALL SBR1, &VB100, 5Network 3// 这里对排序后的三个值取平均值LD SM0.0LPSMOVW VW102, VW200AENO+I VW104, VW200AENOMOVW VW200, VW202+I VW106, VW202LPPMOVW VW202, VW204/I +3, VW204冒泡法--------------把A[0],A[1]......A[J]从小到大进行排序//// 注:排序数为字整数,即VW##,如:VW100,VW102,VW104等//// LD20---------------------------变量I// LD30---------------------------变量J// LD8------------------------------N-1Network 1 // 初始化I=0,J=0LD SM0.0MOVD 0, LD20MOVD 0, LD30MOVD LD4, LD8-D 1, LD8Network 2LBL 0Network 3 // J=I+1LD SM0.0MOVD LD20, LD30+D 1, LD30Network 4LBL 1Network 5 // A[I] > A[J] ?LD SM0.0MOVD LD20, LD12*D +2, LD12MOVD LD30, LD16*D +2, LD16MOVD LD12, AC1+D LD0, AC1MOVD LD16, AC2+D LD0, AC2Network 6LDW>= *AC1, *AC2NOTJMP 2Network 7 // A[I],A[J]进行交换LD SM0.0MOVW *AC1, LW24 MOVW *AC2, *AC1 MOVW LW24, *AC2 Network 8LBL 2Network 9 // J++LD SM0.0INCD LD30Network 10 // J=N?LDD= LD30, LD4NOTJMP 1Network 11 // I++LD SM0.0INCD LD20Network 12 // I=N-1?LDD= LD20, LD8NOTJMP 0二、冒泡法----普通语句(自己写的)主程序:Network 1LD I0.1AN Q0.0CALL SBR0, &VB100, 10, I0.0, Q0.0子程序:TITLE=程序注释Network 1LD SM0.0LDW> LW4, 255OW< LW4, 0ALDLPSS L6.1, 1NOTR L6.1, 1LPPJMP 0Network 2LD SM0.0MOVW LW4, LW8-I 1, LW8Network 3LD SM0.0MOVD LD0, AC1FOR LW10, +1, LW8AENOMOVD +1, AC2+D AC1, AC2MOVW +1, LW14+I LW8, LW14Network 4LD SM0.0FOR LW12, LW14, LW4Network 5LD SM0.0A L6.0JMP 1Network 6LD SM0.0AB> *AC1, *AC2MOVB *AC1, AC0AENOMOVB *AC2, *AC1 AENOMOVB AC0, *AC2 Network 7LD SM0.0JMP 2Network 8LBL 1Network 9LD SM0.0AB< *AC1, *AC2 MOVB *AC1, AC0 AENOMOVB *AC2, *AC1 AENOMOVB AC0, *AC2 Network 10LBL 2Network 11LD SM0.0+D +1, AC2 Network 12NEXTNetwork 13LD SM0.0+D +1, AC1 Network 14NEXTNetwork 15LBL 0。
一、冒泡法---封装库(别人写的)
主程序:
请注意,这里的数据操作均为字整型,不支持浮点数,要支持浮点数,需要修改冒泡排序程序.
Network 1
// 假设原始数据放在VW50,那么通过不同的时间片,将这个原始数据放在VW100------VW108,
LD SM0.1
MOVW VW50, VW100
MOVW VW52, VW102
MOVW VW54, VW104
MOVW VW56, VW106
MOVW VW58, VW108
Network 2 // 网络标题
// 对VW100----VW108的数据进行排序,去掉最大值和最小值,只取中间三个样本
LD M0.0
EU
CALL SBR1, &VB100, 5
Network 3
// 这里对排序后的三个值取平均值
LD SM0.0
LPS
MOVW VW102, VW200
AENO
+I VW104, VW200
AENO
MOVW VW200, VW202
+I VW106, VW202
LPP
MOVW VW202, VW204
/I +3, VW204
冒泡法--------------把A[0],A[1]......A[J]从小到大进行排序
//
// 注:排序数为字整数,即VW##,如:VW100,VW102,VW104等
//
// LD20---------------------------变量I
// LD30---------------------------变量J
// LD8------------------------------N-1
Network 1 // 初始化I=0,J=0
LD SM0.0
MOVD 0, LD20
MOVD 0, LD30
MOVD LD4, LD8
-D 1, LD8
Network 2
LBL 0
Network 3 // J=I+1
LD SM0.0
MOVD LD20, LD30
+D 1, LD30
Network 4
LBL 1
Network 5 // A[I] > A[J] ?
LD SM0.0
MOVD LD20, LD12
*D +2, LD12
MOVD LD30, LD16
*D +2, LD16
MOVD LD12, AC1
+D LD0, AC1
MOVD LD16, AC2
+D LD0, AC2
Network 6
LDW>= *AC1, *AC2
NOT
JMP 2
Network 7 // A[I],A[J]进行交换LD SM0.0
MOVW *AC1, LW24 MOVW *AC2, *AC1 MOVW LW24, *AC2 Network 8
LBL 2
Network 9 // J++
LD SM0.0
INCD LD30
Network 10 // J=N?
LDD= LD30, LD4
NOT
JMP 1
Network 11 // I++
LD SM0.0
INCD LD20
Network 12 // I=N-1?
LDD= LD20, LD8
NOT
JMP 0
二、冒泡法----普通语句(自己写的)主程序:
Network 1
LD I0.1
AN Q0.0
CALL SBR0, &VB100, 10, I0.0, Q0.0
子程序:
TITLE=程序注释
Network 1
LD SM0.0
LDW> LW4, 255
OW< LW4, 0
ALD
LPS
S L6.1, 1
NOT
R L6.1, 1
LPP
JMP 0
Network 2
LD SM0.0
MOVW LW4, LW8
-I 1, LW8
Network 3
LD SM0.0
MOVD LD0, AC1
FOR LW10, +1, LW8
AENO
MOVD +1, AC2
+D AC1, AC2
MOVW +1, LW14
+I LW8, LW14
Network 4
LD SM0.0
FOR LW12, LW14, LW4
Network 5
LD SM0.0
A L6.0
JMP 1
Network 6
LD SM0.0
AB> *AC1, *AC2
MOVB *AC1, AC0
AENO
MOVB *AC2, *AC1 AENO
MOVB AC0, *AC2 Network 7
LD SM0.0
JMP 2
Network 8
LBL 1
Network 9
LD SM0.0
AB< *AC1, *AC2 MOVB *AC1, AC0 AENO
MOVB *AC2, *AC1 AENO
MOVB AC0, *AC2 Network 10
LBL 2
Network 11
LD SM0.0
+D +1, AC2 Network 12
NEXT
Network 13
LD SM0.0
+D +1, AC1 Network 14
NEXT
Network 15
LBL 0。