展开查看
以下是引用letham在2014-12-18 17:27:44的发言 >11楼:
quote:以下是引用0917在2014-12-17 10:44:23的发言:
学习了,谢谢楼主分享,但是子程序块的偏移地址是怎么回事?自己在琢磨琢磨!
LAR1 P#Bins
仅仅是 得到了Bins这个数组在多重背景FB块里的首地址,由于多重背景FB,在调用时,没有自己的单独的DB块,需要使用 调用多重背景FB块的背景DB,考虑到调用多重背景FB块的FB块有其他IN,STAT等类型数据,所以BINS在调用多重背景FB块的FB地址并不等于LAR1 P#BINS后 的AR1,在调用多重背景FB块时,AR2会自动定位到 被多重背景使用的FB块在 “父FB块”的偏移地址。
下面语句 就是干这个事的
LAR1 P##Bins;
TAR2 //新增加语句,取出“子FB块"在”父FB块“中的偏移地址
+AR1 //新增语句,加上该偏移地址,从而得到BINS在“父FB块”中的偏移地址
说的太拗口了 你可以把 被多重背景使用的FB块叫“子FB”,调用多重背景FB块的FB块 叫“父FB”吧。
谢谢楼主的回复。关于子程序块调用,我是不是可以这样理解,在FB块调用子程序块时子程序块里的变量占用了FB块的地址,所以p##bins并没有指向子程序块里的bins所占地址,这就是所谓的地址偏移。但是“在调用多重背景FB块时,AR2会自动定位到 被多重背景使用的FB块在 “父FB块”的偏移地址。”AR2为什么会自动定位为偏移地址?不是很理解。