S7-300间接寻址中的寄存器间接寻址详解,地址寄存器

(1)寄存器间接寻址概述

寄存器间接寻址是通过使用CPU内部集成的两个地址寄存器AR1和AR2存储地址指针来实现的寻址方式,使用时分为内部区域间接寻址和交叉区域寻址两种寻址方式。

AR1,AR2均为32位寄存器,寄存器间接寻址只使用32位指针。对地址寄存器AR操作的相关指令有:

(2)寄存器寻址——内部区域寄存器间接寻址

内部区域寄存器间接寻址指针用于I、Q、M、L和数据块等存储器中的位、字节、字及双字的寻址,与32位存储器的使用方式相同,不同之处在于指针存储的位置不同。内部区域寄存器地址指针格式如下所示:

第0位至第2位作为寻址操作的位地址,第3位至第18位作为寻址操作的字节地址,第19位至第30位没有定义,第31位为内部区域与交叉区域指针标识符,0:内部区域指针,1:外部区域指针。

内部寄存器间接寻址格式:地址存储器标识符[地址寄存器,P#BYTE.BIT]。

如:MW[AR1,P#4.0]或DIX[AR2,P#0.0]

MW:表示访问的存储器及访问的长度,AR1:表示地址寄存器1,P#4.0为地址偏移量,

例如:

(3)寄存器寻址——交叉区域寄存器间接寻址

交叉区域寄存器寻址与内部区域寄存器寻址相比,地址指针中带有存储器标识符,如I、Q、M等,交叉区域地址指针格式如下:

第0位至第2位作为寻址操作的位地址,第3位至第18位作为寻址操作的字节地址,第24位至第26位为地址标识符,第31位为内部区域与交叉区域指针标识符,0:内部区域指针,1:外部区域指针。

地址标识符表示如下:

交叉区域寄存器寻址格式为:访问宽度[地址寄存器,P#BYTE.BIT]。指针指向地址等于地址寄存器地址+地址偏移常量。

例如:

在S7-300中除了提供16位和32位存储器地址指针和32位寄存器地址指针外,在程序的FC和FB的接口参数中,还提供了48位(pointer数据类型)和80位(ANY数据类型)的地址指针。16位和32位地址指针可以直接装在到存储器或地址寄存器中,从而可以在程序块中使用间接寻址。“pointer”和“ANY”指针由于大于32位而不能装在到存储器或是寄存器中,所以不能在程序块中直接使用,必须进行拆分使用,这两种指针专用于功能(FC)和功能块(FB)接口参数的传递。如调用函数赋值形参时,都实参的完全寻址。
责任编辑人:CC

相关推荐

相关文章