发布于 2015-04-29 11:57:37
3楼
展开查看
以下是引用Automann在2015-04-29 10:03:57的发言 >1楼:下面是FC1的程序状态监控图, sttt的数据类型为pointer,累加器1的显示格式为十六进制。

下面是参数类型Pointer各字节的意义。

第一条指令中的P##sttt是OB1的局部数据区中保存6字节Pointer sttt的起始字节地址,第二个#号是局部变量的符号。
第二条指令LAR1将上述地址送AR1,AR1中的V21.0是OB1的局部数据区中的地址。
指令“L D [AR1,P#2.0]”将指针sttt第2个字节开始的后4个字节(即sttt的实参MW20的地址P#M20.0)送ACCU1。
第4条指令LAR1将ACCU1中的地址送AR1,从监控可知AR1中的地址为P#M20.0。
指令“L 1.000000e+003”将1000.0送ACCU1。
指令RND将1000.0转换为双整数1000(16#3e8)。
执行最后一条指令“MW [AR1,P#50.0]”时,AR1中的地址P#M20.0加上偏移量P#50.0,所以地址MW [AR1,P#50.0]为MW70.
朋友,先谢谢你又来回复我,太详细了。我还有最后一点想问下,870000a8是从哪里来的?以及a8通过L D [AR1,P#2.0怎么就算出a0了呢?
如果你有梦想的话,就要去捍卫它。那些一事无成的人想告诉你你也成不了大器。如果你有理想的话,就要去努力实现。就这样。