回复:指针3 求教

火麒麟

西门子1847工业学习平台

  • 帖子

    571
  • 精华

    18
  • 被关注

    20

论坛等级:侠圣

注册时间:2006-09-21

普通 普通 如何晋级?

发布于 2011-11-19 21:20:50

9楼

对不起,本帖的第一个回帖想当然了,但我觉得此程序的编写者还不是很严谨
我觉得这个程序应该是在被调用的多重背景FB里编写的,前面的4句的目的是为了得到变量#CnvData在背景数据块中的起始地址

我的解释如下:
L P##CnvData 装载变量CnvData的地址到累加器1
LAR1 把累加器1里的地址传送到地址寄存器AR1
TAR2 把地址寄存器AR2的内容装载到累加器1,多重背景FB中,AR2存储该FB第一个变量在背景DB中的起始地址
+AR1 把累加器1中的地址(注意,是累加器1中的低字地址)偏移量加到地址寄存器AR1
经过这样处理后,AR1中就得到了#CnvData在背景DB里具体地址了

因为+AR1加的是ACCU1中的低字地址,所以正好把ACCU1-H中的区域ID丢掉了,但我们知道,在32位指针中,0-18位是代表具体地址信息的,所以+AR1这条指令有可能会漏掉3位
所以,严谨点,最好这样写:
TAR2
AD DW#00FFFFFF (屏蔽掉存储区ID,具体就是16#80、16#81等啥的,只取出地址信息)
L P##CnvData
+D
LAR1
这样处理后,效果是一样的,但是更加可靠。
当然,这是我的猜测,楼主可把程序打包上来看看
业精于勤,行成于思
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54778条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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