间接寻址方式是指通过使用指针来存取存储器中的数据的一种寻址方式。S7-200 CPU允许使用指针对I、Q、V、M、S、T(仅当前值)和C(仅当前值)存储区域进行间接寻址,但不能对独立的位或模拟量进行间接寻址。使用间接寻址方式存取数据的过程如下。
(1)建立指针
使用间接寻址之前应创建一个指向该位置的指针。由于存储器的物理地址为32位,所以指针的长度应当为双字,只能用变量存储器V、局部存储器L或累加器AC1、AC2和AC3作指针。
为了生成指针,必须用双字传送指令( MOVD)将要间接寻址的某存储器的地址装入用来作为指针的编程元件中,装入的是地址而不是数据本身。例如,
MOVD &VB200, AC1 //VB200的地址送入AC1,建立指针
MOVD &C3, VD6 //C3的地址送入VD6,建立指针
MOVD &MB4, LD8 //MB4的地址送入LD6,建立指针
指令的输入操作数开始处使用“&”符号,表示所寻址的操作数是要进行间接寻址的存储器的地址;指令的输出操作数是指针所指向的存储器地址,其数据长度为双字。
(2)用指针来存取数据
用指针来存取数据时,操作数前加“*”号,表示该操作数为一个指针。图2-17中的“*AC1”表示AC1是一个指针,*AC1是MOVW指令确定的一个字长的数据。此例中,存于VB101和VB102的数据被传送到累加器ACO的低16位。
图2-17 指针间接寻址方式
(3)修改指针
连续存取指针所指的数据时,因为指针是32位的数据,应使用双字指令来修改指针值,如双字加法(ADDD)或双字加1(INCD)指令。修改时需要根据所存取的数据长度来正确调整指针。当存取字节数据时,指针调整单位为1,即可执行1次INCD指令;当存取字时,指针调整单位为2;当存取双字时,指针调整单位为4,如图2-18所示。
图2-18 改变指针寻址方式