STL编程循环及指针的问题

一段STL编辑的程序,只看懂了大概意思是将状态位M赋值给DB块,但为什么要使用SRW   1(却不直接赋值一个合适的数),及循环多少遍不太确定(自己分析为(1023-400)次),请大家帮忙看看.其中(#INO=200,#IN1=35)

      L     #IN1
      T     #TEMP2
      OPN   DB [#TEMP2]
      L     P#0.0
      LAR1  
      L     #IN0
      SRW   1
      L     1023
      >I    
      JC    M002
      TAK   
M001: T     #TEMP3
      L     MW [AR1,P#2.0]
      T     DBW [AR1,P#2.0]
      +AR1  P#2.0
      L     #TEMP3
      LOOP  M001
M002: NOP   0

问题补充:
按楼上的回答,如果循环100次,循环的结果是不是将M102.0-M201.9状态值放到了数据块DB35中,地址为DB35.DB2.0-DB35.DB101.9中

最佳答案

可以看下下面的解释
L     #IN1
      T     #TEMP2
      OPN   DB [#TEMP2]
      L     P#0.0
      LAR1  
      L     #IN0      装载 #IN0 即200至地址累加器1
      SRW   1        右移位相当于把200乘以2即400
      L     1023     装载累加器1的内容至累加器2(即#IN0  ,400)并把1023累加器1
      >I    
      JC    M002    累加器2的内容(即#IN0  ,400)大于累加器1(1023)刚跳转到M002   
      TAK              若  累加器2的内容不大于累加器1则交换累加器1的累加器2的内容
M001: T     #TEMP3      把累加器1的内容传送到 #TEMP3(即循环次数)
      L     MW [AR1,P#2.0]
      T     DBW [AR1,P#2.0]
      +AR1  P#2.0
      L     #TEMP3
      LOOP  M001
M002: NOP   0
从这段程序可以看出#IN0 乘以2的结果大于1023时跳过程序,不循环,若不大于即小于等于时,
则按#IN0 乘以2的次数进行循环.本例为400

提问者对于答案的评价:
学习了.很有帮助.谢谢!

专家置评

已阅,最佳答案正确。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc234500.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 下午2:29
下一篇 2018年12月1日 下午2:29

相关推荐