首页 热点资讯 义务教育 高等教育 出国留学 考研考公

ANY 数据类型是怎么解析的

发布网友

我来回答

1个回答

热心网友

在学习ANY参数类型时我也想过这个问题,当时为了好理解,我把重点放在了“P#”这个前缀上,大家都知道“L”这条命令的操作对象是累加器1、2,ACCU1和ACCU2,两者都是32位的系统存储器,而ANY类型的参数是10个字节的空间,所以L命令不能用在ANY类型的变量上,是不合法的,若加前缀P#则是指“取该ANY类型变量的地址信息”,那么ANY类型变量的其他字节所包含的信息不被装入到ACCU1里面,即只取10个字节中的byte6、byte7、byte8、byte9(从byte0开始编址),装入到ACCU1里面,再复制给AR1,所以AR1存储地址信息的格式和ANY类型变量的那四个字节一样,都是低三位作为位地址,接下来的16位为字节地址,空出来5个位,最高字节的低三位用作地址标识,最高位用来判断是否是为交叉寻址,若是则为1,后来我获得一个证据来证明我的这条猜想,那就是在STEP7自带的帮助文件中,ANY类型的数据变量在规定“memory area”(即byte6)的赋值时是用b#16#8X代表的,如b#16#81,代表I存储区,为什么是8而不是0呢,因为8的二进制代码为2#1000,最高位为1!就是交叉寻址了。我想这个解释能让你理解AR1是怎样获得ANY类型变量的地址信息了吧。
至于偏移量的计算这个比较好理解,就是位信息加在位信息上,字节信息加在字节信息上,如当AR1存有IX1.0的信息时,字节地址为1,位信息为0,执行[AR1,P#2.0]这个命令后,变为IX3.0 。
另外多说一点,在ANY类型变量的10个字节中有一个字的长度是用来存储DB NO的即DB块编号,这一信息在程序执行是被装到DB寄存器中了,STL在线运行时,可以监视DB寄存器的内容。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com