指针寻址好迷糊啊

这么一段程
*******************************
 L     "DB_CMV".iAct
//      L     2                           // F黵 Test

      T     #iIndex                     //z.B. L 11 --> T  #iIndex
LOP1: OPN   "DB_CMV"                    //Test f?Datensatz Nr. 1
//Gehe Ende FB Sprungmarke LOP1

      T     #iIndex                     //Datensatznummer speichern
      OPN   "DB_CMV"
      L     #iIndex
      +     -1
      L     DBW    4                    //Datensatzl鋘ge UDT251 in Byte
      *I    
      L     DBW    2                    //Startadresse CMV Ventil Datensatz Nr.1 
      +I    
      SLD   3
      T     #DBD_Adresse                //Startadresse Datensatz 

      L     DBB [#DBD_Adresse]          //CMV Zustansbyte 0
      T     LB     0                    //CMV Zustansbyte 0

      L     #DBD_Adresse
      L     8
      +D    
      T     #DBD_Adresse
      L     DBB [#DBD_Adresse]          //CMV Zustansbyte 1
      T     LB     1                    //CMV Zustansbyte 1

      L     #DBD_Adresse
      L     8
      +D    
      T     #DBD_Adresse
      L     DBB [#DBD_Adresse]          //CMV Zustansbyte 2
      T     LB     2                    //CMW Zustansbyte 2
********************
我想问的是一开始不是把 index 做了好多计算然后 左移三位放到 DBD_Adresse 里了吗,已经是指针了啊,怎么在后面还能对DBD_Adresse做+D运算? 后面每次+8为什么是加一个字节?
初始值   DBW4=64    DBW2=20   那么第一次运算寻址到1360,第一次+8 不是1360+8吗

最佳答案

怎么在后面还能对DBD_Adresse做+D运算?可以对这个存放指针数据的变量进行加法运算,通过正确的计算,就能够得到不同位置的寻址。
 后面每次+8为什么是加一个字节?这要是因为 L     DBB [#DBD_Adresse]   这条指令是对字节进行间接寻址的 ,+8其实就是字节往后移动一个。
初始值   DBW4=64    DBW2=20   那么第一次运算寻址到1360,第一次+8 不是1360+8吗?
因为程序不是很全,仅从这里看的话,第一次指针的数值应该是(2-1)*64+20=84,#DBD_Adresse的值为84*8=672,

提问者对于答案的评价:
3Q

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

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

相关推荐