发布于 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
这样处理后,效果是一样的,但是更加可靠。
当然,这是我的猜测,楼主可把程序打包上来看看
业精于勤,行成于思