发表于:2006-09-04 13:21:00
5楼
我来试试:
OPN DB 10 //打开DB10
LAR1 P#DBX 60.0 //把DB10.DBX60.0的地址放到AR1
L 1
T #TEMP11 //把1付给TEMP11
L 10 //置循环次数为10
M003: T #TEMP10
L W [AR1,P#0.0] //读DB10.DBW60
L #TEMP12 //读TEMP12
<=I //如果DB10.DBW60<TEMP12
JC M001 //跳转到M001
JU M002 //否则跳转到M002
M001: L #TEMP11
+ 1
T #TEMP11 //TEMP11=TEMP11+1
+AR1 P#2.0 //地址积存器增加2BYTE
L #TEMP10
LOOP M003 //循环M003
//上面的循环是依此查找DB10.DBW60~DBW78里小于TEMP12的值的数量并且放到TEMP11;当查找到或查找完后执行下面的程序
M002: LAR1 P#DBX 110.0 //把DB10.DBX60.0的地址放到-AR1
L #TEMP11
T #OUT6 //TEMP11付给OUT6;并且置循环次数为TEMP11
M004: T #TEMP11
+AR1 P#10.0 //地址积存器增加10BYTE
L #TEMP11
LOOP M004 //循环M004
//以上这段程序是根据TEMP11的值重新定位AR1
LAR2 P#DBX 530.0 //把DB10.DBX530.0付给AR2
L 5
M005: T #TEMP11 //置循环次数为5
L W [AR1,P#0.0] //把AR1指定地址的WORD付给AR2指定的
T W [AR2,P#0.0]
+AR1 P#2.0
+AR2 P#2.0 //AR1/2指针增加2BYTE
L #TEMP11
LOOP M005 //循环M005
//这整段程序相当于:
1.查找DB10.DBW60~78小于TEMP12的数的数量,并且由该量来定位要COPY的值的地址
2.定位要COPY的值的地址DB10.DBW[TEMP11*10+AR1]
3.COPY到响应的位置:
DB10.DBW[TEMP11*10+AR1+0.0]-->DB10.DBW530
DB10.DBW[TEMP11*10+AR1+2.0]-->DB10.DBW532
DB10.DBW[TEMP11*10+AR1+4.0]-->DB10.DBW534
DB10.DBW[TEMP11*10+AR1+6.0]-->DB10.DBW536
DB10.DBW[TEMP11*10+AR1+8.0]-->DB10.DBW538