发布于 2015-07-07 11:10:07
15楼
找了一段STL的例子,老外编写指针都是这样了,当初学习STL不是为了用的,而是能看懂别人的程序。
L 0 //初始化临时变量#ADD_TEMP。
T #ADD_TEMP
L P##In_Data //指向存储地址指针P#M100.0的首地
址,并装载到地址寄存器AR1中。
LAR1
L 0 //判断OB1中赋值的地址指针是否为数
据块(参考POINTER的数据格式)。
L W [AR1,P#0.0]
==I
JC M1
T #BLOCK_NO
OPN DB [#BLOCK_NO] //如果是DB块,打开指定的DB块。
M1: L D [AR1,P#2.0] //找出需要计算数据区的开始地址,
POINTER数据中,后4个字节包含内部
交叉指针,将
LAR1 P#M100.0装载到AR1中。
L 0
L #NO //如果输入变量个数为0,结束FC3的
执行。如果不等于0作为循环执
==I 行的次数(NO_TEMP)。
JC END
NO: T #NO_TEMP //循环执行加运算,本例中循环执行的次
数为4。
L D [AR1,P#0.0] //装载MD100到累加器1中。
L #ADD_TEMP //与临时变量#ADD_TEMP相加后将计算结
+R 果再存储于#ADD_TEMP中。
T #ADD_TEMP
+AR1 P#4.0 //地址寄存器加4,下一次于MD104相加。
L #NO_TEMP //LOOP 指令固定格式。
LOOP NO //跳回“NO”循环执行,执行完定义在变
量#NO_TEMP的次数后自动跳出循环程序。
L #ADD_TEMP //求平均值,装载运算结果到累加器1中。
L #NO
DTR //将变量个数转变为浮点值便于运算。
/R
T #OUT_VAL //输出运算结果。
END: NOP 0