发布于 2014-02-05 08:40:16
3楼
TAR1 #tAR1_MEM //保存当前AR1到变量#tAR1_MEM
TAR2 #tAR_BASE //保存当前AR2到变量#tAR_BASE
L P##inDATA_POINTER //装载变量 #inDATA_POINTER的起始地址到累加器,在多重背景调用里,这个地址实际是相对地址,即就是一个偏移量
L DW#16#7FFFF
AD //过滤32位地址里的区域信息(比如P#DBX100.0变成P#100.0)
T #tAR_OFFSET
L #tAR_OFFSET
L #tAR_BASE //这段代码我想是在FB里的,FB里AR2保存的是背景数据的起始地址
+D
LAR1 //这里实际上就是把变量#inDATA_POINTER的真实地址(即在多重背景数据块里的绝对地址)装载到AR1
L W [AR1,P#0.0]
T MW 2 //传送#inDATA_POINTER的第一个字到MW2,Pointer指针的第一个字是DB块号
L D [AR1,P#2.0]
T MD 4 //传送#inDATA_POINTER后4个字节的32位区域地址到MD4
LAR1 #tAR1_MEM //恢复AR1之前的值
这段代码说明了如何在多重背景调用里访问FB的输入Pointer 类型指针变量。