发布于 2013-10-18 07:25:41
19楼
对ANY数据类型的错误理解的分析
最近看到有个下面的帖子(ANY指针可以这么用么?):
各位好,最近学习一下ANY指针,写了段测试代码,但是无法执行,请问是不是ANY指针不能这么使用呢?谢谢!
代码如下:
L P##TEMP0
LAR1
L W#16#1001
T W [AR1,P#0.0]
L W#16#0
T W [AR1,P#2.0]
L W#16#0
T W [AR1,P#4.0]
L DW#16#81000000
T D [AR1,P#6.0]
SET
A [AR1,P#0.0]
= Q 0.0
下面是我的分析:
楼主上面这段代码实际上是在填写ANY的10个字节的值,虽然辛苦,做的却是无用功。问题在于他没有理解ANY的使用方法。
ANY是参数类型,只是用来作块的输入、输出参数。在调用逻辑块时, ANY用于将任意的数据类型传递给声明的形参。ANY的实参可以是单个的任意地址,也可以是一片连续的地址区,例如P#DB1.DBX0.0 INT 50(DB1中从DW0开始的50个整数)。但是ANY的10个字节的值是操作系统根据块的实参的值自动生成的,而不是用户生成的。我们可以用寄存器间接寻址读取ANY的10个字节中包含的大量信息,例如实参的基本数据类型,数据块的编号,重复因子(变量的个数),地址区的起始地址等等。
追求完美