首页 理论教育 如何进行寄存器间接寻址?

如何进行寄存器间接寻址?

时间:2023-06-27 理论教育 版权反馈
【摘要】:图4-23给出了区域内间接寻址的例子,图中累加器1的显示格式为十六进制数。图4-23 寄存器间接寻址指针常数P#5.0对应的二进制数为2#00000000000000000000000000101000。用寄存器间接寻址访问一个字节、字或双字时,必须保证指针的位地址编号为0。

如何进行寄存器间接寻址?

1.寄存器间接寻址的指针格式

S7-300/400有两个用于寄存器间接寻址的地址寄存器AR1和AR2,可以用它们对各存储区的地址作寄存器间接寻址。地址寄存器中的地址指针值加上地址偏移量,形成地址指针,指向数据所在的存储单元

978-7-111-54209-4-Chapter04-27.jpg

图4-22 寄存器间接寻址的双字指针格式

图4-22是地址寄存器间接寻址的双字地址指针的格式,其中第0~2位(xxx)为被寻址地址中位的编号(0~7),第3~18位为被寻址地址的字节的编号。第24~26位(rrr)为被寻址地址的区域标识号(见表4-3),第31位x=0为区域内的间接寻址,为1则为区域间的间接寻址。如果OB1调用FC1,对于FC1来说,OB1(主调块)的局部数据区称为V区。

表4-3 区域间寄存器间接寻址的区域标识符

978-7-111-54209-4-Chapter04-28.jpg

2.与地址寄存器有关的指令

可以不经过累加器1,直接将操作数装入地址寄存器AR1和AR2(见表4-4),或者从AR1和AR2将数据传送出来。也可以将两个地址寄存器的内容直接交换,指令TAR1<D>和TAR2<D>的目的区为双字MD、LD、DBD和DID。

表4-4 与AR1和AR2有关的指令

978-7-111-54209-4-Chapter04-29.jpg

下面是应用实例:

978-7-111-54209-4-Chapter04-30.jpg

+AR1指令将地址寄存器AR1的内容加上作为地址偏移量的累加器1的低字的内容,或者加上指令中的16位常数,结果在AR1中。+AR2指令具有类似的功能。16位有符号整数首先被扩充为24位,其符号位不变,然后与AR1中的低24位有效数字相加。地址寄存器中的存储区域标识符rrr(第24~26位,见图4-22)保持不变。下面是应用实例:

978-7-111-54209-4-Chapter04-31.jpg

3.寄存器区域内间接寻址

区域内间接寻址的地址指针格式与存储器间接寻址的相同(见图3-81),指针给出了被寻址数值所在的存储单元的字节地址和位地址,存储区的类型在指令中给出。这种指针格式适用于在某一存储区内寻址。最高字节中的第24~26位(rrr)和第31位为0。

图4-23给出了区域内间接寻址的例子(见随书光盘中的项目“寄存器间接寻址”),图中累加器1(STANDARD)的显示格式为十六进制数。AR1的监控值5.0是P#5.0的简写。(www.xing528.com)

978-7-111-54209-4-Chapter04-32.jpg

图4-23 寄存器间接寻址

指针常数P#5.0对应的二进制数为2#00000000000000000000000000101000(16#28)。

因为AR1中的地址值为P#5.0,程序中的M[AR1,P#2.3]和Q[AR1,P#0.2]的地址分别为M7.3和Q5.2。可以用仿真实验检查是否可以用M7.3控制Q5.2。

用寄存器间接寻址访问一个字节、字或双字时,必须保证指针的位地址编号为0。

4.寄存器区域间的间接寻址

区域间的间接寻址的地址指针格式的第24~26位还包含了说明地址所在存储区的区域标识符rrr(见表4-3)。图4-23给出了区域间间接寻址的例子。

P#M6.0对应的二进制数为2#10000011000000000000000000110000(16#83000030)。因为地址指针P#M6.0已经包含有区域信息,间接寻址的指令“L W[AR1,P#20.0]”省略了地址标识符M(见图4-23)。

5.参数类型

参数类型是为逻辑块的形参定义的数据类型,用于在调用逻辑块时传递参数。除了简单数据类型和复杂数据类型(见4.2节)之外,还可以使用下列参数类型:

(1)Timer与Counter

使用参数类型Timer(定时器)和Counter(计数器),可以在调用逻辑块时,分别将定时器和计数器的编号(例如T3、C21)作为实参传递给块的形参(见图4-9)。

(2)Block

使用参数类型Block_FC、Block_FB、Block_DB和Block_SDB,可以在调用逻辑块时分别将FC、FB、DB和系统数据块SDB的编号作为实参传送给块的形参。块参数类型的实参应为同类型的块的绝对地址编号(例如FB2)或块的符号名。

参数类型Timer、Counter、Block只能用于块的输入参数(IN)。

参数类型POINTER和ANY将在下一节和4.4.3节介绍。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈