间接寻址可分为两大类型:存储器间接寻址和寄存器间接寻址。如图1所示。
1、存储器间接寻址
存储器间接寻址的地址给定格式是:地址标识符+指针。指针所指示存储单元中所包含的数值,就是地址的确切数值单元。
2、寄存器间接寻址
寄存器间接寻址为通过 CPU的地址寄存器AR1,AR2进行寻址。AR1,AR2 均为 32 位寄存器,寄存器间接寻址只使用 32 位指针。
间接寻址是指使用地址指针来存取存储器中的数据。使用前,首先将数据所在单元的内存地址放入地址指针寄存器中,然后根据此地址存取数据。S7-200CPU中允许使用指针进行间接寻址的元器件有I、Q、V、M、S、T、C。
建立内存地址的指针为双字长度(32位),故可以使用V、L、AC作为地址指针。必须采用双字传送指令(MOVD)将内存的某个地址移入到指针当中,以生成地址指针。指令中的操作数(内存地址)必须使用“&”符号表示内存某一位置的地址(长度为32位)。例如:
MOVD&VB200,AC1
表示将VB200在存储器的32位物理地址值送AC1。VB200是直接地址编号,&为取地址符号。将本指令中&VB200改为&VW200或VD200,指令功能不变。
在使用指针存取数据的指令中,操作数前加有*时表示该操作数为地址指针。例如:
MOVW*AC1.AC0
表示将AC1作为内存地址指针,把以AC1中内容为起始地址的内存单元的16位数据送到累加器AC0中。
1、区域内间接寻址
指针的最高位(第31位)x为0时为区域内的间接寻址,此时区域标示号rrr也为0,地址指针的格式与存储器间接寻址的相同。下面是区域内间接寻址的例子:
方括号内为操作数的地址,它等于AR1中的地址值P#5.0加上逗号后面的地址偏移量,例如第3条指令中操作数的地址为P#5.0+P#2.3=P#7.3,即操作数为M7.3。
2、区域之间的间接寻址
指针的最高位(第31位)x = 1时为区域间的间接寻址,下面是区域间的间接寻址的例子:
P#M6.0对应的二进制数为2#1000 0011 0000 0000 0000 0000 0011 0000。因为地址指针P#M6.0已经包含有区域信息(rrr=2#011表示M区),第3条指令“L W[AR1, P#50.0]”没有必要再使用地址标识符M。
用地址指针读写字、字节或双字时,指针中小数点右边的位编号必须为0,否则将会出错。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』