帮忙解读一下程序

SET   
      SAVE  
      =     L      0.1
      L     P##aiPara
      LAR1  
      L     W [AR1,P#0.0]
      T     LW     2
      OPN   DB [LW 2]
      L     D [AR1,P#2.0]
      LAR1  
      L     D [AR1,P#8.0]
      L     D [AR1,P#4.0]
      -R    
      L     0.000000e+000
      <>R   
      JCN   A7d0
      L     #IN
      ITD   
      DTR   
      L     D [AR1,P#4.0]
      -R    
      L     D [AR1,P#16.0]
      TAK   
      T     LD     2
      TAK   
      L     D [AR1,P#12.0]
      -R    
      L     LD     2
      *R    
      L     D [AR1,P#8.0]
      TAK   
      T     LD     2
      TAK   
      L     D [AR1,P#4.0]
      -R    
      L     LD     2
      TAK   
      /R    
      L     D [AR1,P#12.0]
      +R    
      L     D [AR1,P#0.0]
      *R    
      RND   
      T     #OUT
      JU    A7d1
A7d0: L     0
      T     #OUT
A7d1: CLR   
      A     L      0.1
      SAVE  
      BE

最佳答案

SET   
      SAVE  
      =     L      0.1
      L     P##aiPara         //读取指针
      LAR1  
      L     W [AR1,P#0.0]     
      T     LW     2          //将指针中含有的DB号数据取出给LW2
      OPN   DB [LW 2]
      L     D [AR1,P#2.0]
      LAR1                    //取出指针还有的地址信息赋值到地址寄存器1里
      L     D [AR1,P#8.0]     
      L     D [AR1,P#4.0]
      -R    
      L     0.000000e+000
      <>R                     //D [AR1,P#8.0]-D [AR1,P#4.0]==0则跳转到A7d0,否者程序接着往下执行
      JCN   A7d0
      L     #IN
      ITD   
      DTR                      //将输入的数据IN从int转换到R型浮点数
      L     D [AR1,P#4.0]      
      -R                       //IN- D[AR1,P#4.0]=C
      L     D [AR1,P#16.0]     
      TAK                      //累加器1=C  累加器2=D[AR1,P#16.0]  
      T     LD     2           //LD2=C
      TAK                      //累加器1=D[AR1,P#16.0]  累加器2=C  
      L     D [AR1,P#12.0]     //D[AR1,P#16.0] - D [AR1,P#12.0] 
      -R                        
      L     LD     2           //(D[AR1,P#16.0] - D [AR1,P#12.0])*C 
      *R    
      L     D [AR1,P#8.0]     //累加器1=(D[AR1,P#16.0] - D [AR1,P#12.0])*C  累加器2=D[AR1,P#8.0]  
      TAK                     //累加器1=D[AR1,P#8.0] 累加器2=(D[AR1,P#16.0] - D [AR1,P#12.0])*C 
      T     LD     2          //LD2=D[AR1,P#8.0]
      TAK                     //累加器1=(D[AR1,P#16.0] - D [AR1,P#12.0])*C  累加器2=D[AR1,P#8.0] 
      L     D [AR1,P#4.0]
      -R                      //[(D[AR1,P#16.0] - D [AR1,P#12.0])*C ]-D [AR1,P#4.0]
      L     LD     2           
      TAK      //累加器1=LD2=D[AR1,P#8.0] 累加器2=[(D[AR1,P#16.0] - D [AR1,P#12.0])*C ]-D [AR1,P#4.0] 
      /R       //{[(D[AR1,P#16.0] - D [AR1,P#12.0])*C ]-D [AR1,P#4.0]}/ D[AR1,P#8.0]
      L     D [AR1,P#12.0]
      +R       //{{[(D[AR1,P#16.0] - D [AR1,P#12.0])*C ]-D [AR1,P#4.0]}/ D[AR1,P#8.0]+D [AR1,P#12.0]} 
      L     D [AR1,P#0.0]
      *R       //{{[(D[AR1,P#16.0] - D [AR1,P#12.0])*C ]-D [AR1,P#4.0]}/ D[AR1,P#8.0]+D [AR1,P#12.0]}*R
      RND      //以上计算的数值去整数
      T     #OUT  //最后将计算完的数值给OUT
      JU    A7d1
A7d0: L     0
      T     #OUT
A7d1: CLR   
      A     L      0.1
      SAVE  
      BE
计算的过程很长,主要是要注意TAK在交换的过程中数值是在累加器1里还是在累加器2里,计算;然要了解间接寻址时如何用的;

提问者对于答案的评价:
学习了

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年6月24日 下午4:18
下一篇 2017年6月24日 下午4:18

相关推荐