恭喜,你发布的帖子
发布于 2017-07-19 09:44:34
11楼
意思是不是:L W[AR1,P#0.0]这个是取数据编号 L D[AR1,P#2.0]这个把后面的4个字节也就是这个数据存储的拿出来接下来比如 L B[AR1,P#0.0]这个时候才是取出数据的第一个字节的内容。
L W[AR1,P#0.0] 是取DB号 这个是没问题(不是DB数据区,为0),L D[AR1,P#2.0] 是取指针地址。至于AR1类容是什么 你可以不必关心,这个是实参到形参赋值时,由操作系统赋值的,一般AR1指向L区。
比如 你的 POINTER在进行调用时实参 DB1.DBB20-DBB50 这个字符串区域。
下面打比方来进行注解
在系统调用后
你在程序里通过
L P##S1
操作系统会自动把 S1这个POINTER 类型 的 所占的空间的首地址,放到L区里(还有一个区叫V区 ,其实它就是特殊的L区,简单介绍同一叫L区吧,这个不必深究,也没有太大意思),这个L区开始的6个字节的类容就是POINTER结构是对应的。比如 经过调用后,假设系统把这个指针的类容放到LB10-LB15 6个字节里。
执行上面的语句后,一般会通过 LAR1 把 这个L区的首地址P#10.0 放到的AR1寄存器里。AR1寄存器类容是P#L10.0
下面开始分析POINTER ,
上面 已经知道AR1 里类容是P#L10.0,那么通过 L W[AR1,P#0.0]实际上就是L LW10 ,L D[AR1,P#2.0] 就是 L LD12,那么LW10 里面是什么了?当然是DB号就是1,那么LD12里是什么了,当然是指向DB1.DBB20这个地址,也就是P#20.0(DB1.DBB20)
你的程序中
L D [ AR1 , P#2.0 ] //AR1类容是P#L10.0
LAR1 //此语句过后,AR1里面类容就变成了指向实参的DB1.DBB20-DBB50这个字符串的首地址 //P#20.0了
如果后面再加个 L D [ AR1 , P#2.0 ]语句
这个时候 不是相当于 L LD12了,而是 L DB1.DBD22了 ,直到这一步。指针才真正指向DB1.DBB20-50的类容;
码了这么多字 懂了不?理解POINTER 关键是 理解 POINTER是个指向指针的指针。
请填写推广理由:
分享
只看
楼主