以前没有使用过这指令,感觉楼主程序有问题:
下面是帮助文档:
FOR(FOR)指令执行FOR和NEXT之间的指令。您必须指定索引值或当前循环计数(INDX)、起始值(INIT)和结束值(FINAL)。NEXT(NEXT)指令标记FOR循环结束,并将堆栈顶值设为1。使用FOR/NEXT指令描述为指定计数重复的循环。每条FOR指令要求一个NEXT指令。您可以复原FOR/NEXT循环(在FOR/NEXT循环中放置一个FOR/NEXT循环),深度可达八。例如,假定INIT值等于1,FINAL值等于10,FOR与NEXT之间的指令被执行10次,INDX值递增:1、2、3、...10。如果起始值大于结束值,则不执行循环。每次执行FOR和NEXT之间的指令后,INDX值递增,并将结果与结束值比较。如果INDX大于结束值,循环则终止。
参考一下这个程序:
去看下最简单的冒泡法,自己做才是真道理
//Main主程序 对5个数进行排序从VW4500至Vw4508进行排序,任意多个数可以在SM0.1中初始化;
Network1
LD SM0.1
MOVW 1, VW2000
MOVW 1, VW1000
MOVD &VB4498, VD3000
MOVW 700, VW4500
MOVW 210, VW4502
MOVW 110, VW4504
MOVW 510, VW4506
MOVW 5110, VW4508
MOVW 1, VW600
Network2
LD M1.0
CALL S0:SBR0
//SO:SBR0子程序,采用内外两个For循环及VD1118与VD1008双指针进行排序操作
Network1
LD M1.0
FOR VW2000, VW600, 4
Network2
LD M1.0
FOR VW1000, VW2000, 3
Network3
LD M1.0
LPS
MOVW VW1000, VW1002
AENO
*I +2, VW1002
AENO
ITD VW1002, VD1004
LPP
MOVD VD1004, VD1114
+D +2, VD1114
Network4
LD M1.0
MOVD VD3000, VD1008
+D VD1004, VD1008
MOVD VD3000, VD1118
+D VD1114, VD1118
Network5
LD M1.0
MOVW *VD1008, VW3500
MOVW *VD1118, VW3502
Network6
LD M1.0
AW> VW3500, VW3502
MOVW *VD1008, VW3004
MOVW *VD1118, *VD1008
MOVW VW3004, *VD1118
Network7
NEXT
Network8
NEXT