回复:应用探讨——西门子指针编程使用探讨

Automann

  • 帖子

    6168
  • 精华

    138
  • 被关注

    309

论坛等级:至圣

注册时间:2004-12-23

普通 普通 如何晋级?

发布于 2011-12-02 10:36:46

61楼

寄存器间接寻址的优点
首先看一个例子:用ANY指针作为输入参数,用FC 2对若干个连续存放的字作异或运算。不是字则不进行运算。下面是FC 2中的STL程序:
L P##AnyPoint
LAR1 //10字节ANY指针的存放地址送AR1
L 0
T #Result
L B [AR1,P#1.0] //取ANY指针内的数据类型
L B#16#4
<>I
JC _003
L 0
L W [AR1,P#4.0] //取ANY指针内的数据块编号
==I
JC _001
T #DB_No
OPN DB [#DB_No]
_001: L W [AR1,P#2.0] //取ANY指针内的重复因子
T #Lenth
L D [AR1,P#6.0] //取ANY指针内数据区的起始地址
LAR1
L #Lenth
_002: T #Lenth
L W [AR1,P#0.0] //取要作异或运算的数据字
L #Result
XOW
T #Result
+AR1 P#2.0
L #Lenth
LOOP _002
_003: NOP 0
相对于存储器间接寻址,寄存器间接寻址有两大优点:
1.操作数中有两个可调的地址参数,即地址寄存器中的地址值和逗号后面的地址偏移量。
上面的程序开始的时候AR1存放的是10字节ANY指针中数据的起始地址。通过改变偏移量,可以方便地取出ANY指针中的数据类型B [AR1,P#1.0]、数据块编号[AR1,P#4.0]、数据的个数[AR1,P#2.0]和数据区D [AR1,P#6.0]的起始地址。如果改为存储器间接寻址,需要多次修改地址指针的值,才能取出不同的数据。
2.区域间的寄存器间接寻址包含了地址区的信息。

选用间接寻址方式的建议
有参数类型为Pointer和Any的输入参数的FC、FB,应选用寄存器间接寻址(见上例)。
某些情况(例如多重背景数据块)操作系统会使用AR2,某些情况需要保存和恢复AR1和AR2的值,因此地址寄存器的使用比较复杂,建议慎用。如果在使用地址寄存器间接寻址时,地址偏移量不变,例如一直为P#0.0,建议改为存储器间接寻址。
追求完美
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54764条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。