L P##IN_Source // Load source pointer
LAR1 // Load ind.register AR1
L W [AR1,P#0.0] // Get source DB address
T #TMP_DB_SRC
L W#16#10 // Point to byte 2
+AR1
L B [AR1,P#0.0] // Get source memory area type
L B#16#85 // Load DI type code
>I // IF memory area type is L [local data]
JC END // THEN jump to exit
TAK // Load memory area type
L B#16#84 // Load DB type code
JC END // THEN jump to exit
T B [AR1,P#0.0] // Force source memory area type=DB
SET
S #TMP_DB_SRC_PRE // 1= Source memory area is a DB type
END: NOP 0
L D [AR1,P#0.0] // Get source memory area address
L #IN_Source_WORD_OFFSET // Load offset
SLD 4
+D
T #TMP_SRC_ADDR // Update source memory area address
这段寻址问题基本看明白了判断读取的数据是否为DB类型和装载数据区域指针。不过有几个问题还是困扰了好长时间。
输入 P##IN_Source 为TIME类型的双字DB10.DBD10。
经过 L W#16#10 +AR1 这两条指令后,仿真后在standard一栏中看AR1还是10。为什么不是偏移了两个字节呢。
在最后获取数据区域指针中L D [AR1,P#0.0] ,在在standard一栏中看为84000050,为什么不是84000060呢,上述的+AR1这条指令后,AR1中的内容不变化吗?
L D [AR1,P#0.0] // Get source memory area address
L #IN_Source_WORD_OFFSET // Load offset
SLD 4
+D
T #TMP_SRC_ADDR // Update source memory area address
最后请教各位大侠带有存储的指针怎么理解更形像呢,如P#M100.0 P#DB10。DBX0.0
求各位大侠指导,不甚感激!