当前位置: 主页 > PLC控制

指针寻址好迷糊啊

这么一段程
*******************************
L"DB_CMV".iAct
//L2//F黵TeST

T#iIndex//z.B.L11–>T#iIndex
LOP1:OPN"DB_CMV"//TEStf?DatensatzNr.1
//GeheEndefbSpRUNgmarkeLOP1

T#iIndex//Datensatznummerspeichern
OPN"DB_CMV"
L#iIndex
+-1
LDBW4//Datensatzl鋘geUDT251inByte
*I
LDBW2//StaRTadresseCMVVentilDatensatzNr.1
+I
SLD3
T#DBD_Adresse//StartadresseDatensatz

LDBB[#DBD_Adresse]//CMVZustansbyte0
TLB0//CMVZustansbyte0

L#DBD_Adresse
L8
+D
T#DBD_Adresse
LDBB[#DBD_Adresse]//CMVZustansbyte1
TLB1//CMVZustansbyte1

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

最佳答案

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

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

  • 关注微信

猜你喜欢

微信公众号