回复:300\400存储器与寄存器间接寻址有什么区别

Automann

  • 帖子

    6168
  • 精华

    138
  • 被关注

    308

论坛等级:至圣

注册时间:2004-12-23

普通 普通 如何晋级?

发布于 2016-01-01 20:17:21

5楼

存储器间接寻址比较简单。

寄存器间接寻址比较复杂,功能更强,寻址的地址可用数据寄存器和偏移量来调节。

寄存器间接寻址最典型的应用是对参数类型POINTER或ANY中的参数的寻址。

请看下面的例子:用ANY指针作为输入参数,用FC 2对若干个连续存放的字作异或运算。不是字则不进行运算。

OB1调用FC 2时,将ANYPoint的实参保存在OB1的局部数据区(V区)中。

下面是FC 2中的程序,第一条指令的操作数P##ANYPoint是保存在V区的ANYPoint的10B实参的地址指针。其中的P#表示指针,第2个#号表示局部变量。

执行第一条LAR1指令以后,AR1中的程序状态监控值是参数ANYPoint的实参的起始地址V21.0。执行第二条LAR1指令以后,AR1中是要异或运算的数据区的地址指针值P#DBX0.0。

L           P##ANYPoint               //P#表示指针,第2个#号表示局部变量

LAR1                                  //ANYPoint的实参在V区的指针值送地址寄存器AR1

L           0

T           #Result                    //将保存异或运算结果的字清0 

L           B [AR1,P#1.0]             //取ANYPoint的实参内的数据类型

L           B#16#4

<>I  

JC          _003                     //不是字则返回

L           0

L           W [AR1,P#4.0]            //取ANYPoint的实参内的数据块编号

==I  

JC          _001                     //不是数据块(编号为0)则跳转

T           #DB_No                   //保存数据块编号

OPN       DB [#DB_No]                //打开ANYPoint的实参指定的数据块DB

_001: L     W [AR1,P#2.0]            //取ANYPoint的实参内的重复因子

T           #Lenth                   //保存需要异或的字的个数

L           D [AR1,P#6.0]            //取ANYPoint的实参内要异或的数据区的指针值

LAR1                                 //要异或的数据的起始地址指针值P#DBX0.0送AR1

L           #Lenth                   //取需要异或的字的个数(即需要循环的次数)

_002: T     #Lenth                   //暂存循环计数器值

L           W [AR1,P#0.0]            //取数据字

L           #Result                  //取异或运算的中间结果

XOW                                  //字异或运算

T           #Result                  //存放运算结果

+AR1       P#2.0                     //地址指针值增加两个字节,指针指到下一个字

L           #Lenth                   //循环计数器值装载到累加器1

LOOP      _002                       //若循环计数器值减1后非0,跳转到标号_002

_003: NOP        0


从上述例子可以看到寄存器间接寻址的优点,执行第二条LAR1指令之前,AR1中是POINTER或ANY的实参的地址指针值,通过修改寄存器间接寻址的地址偏移量,可以方便地读取ANY实参内的数据值或地址指针值。


追求完美
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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