关于累加器,地址寄存器,临时变量。
刘玉蓉
发布于2014-11-10 17:24
147
0
标签:
L P##Bits_Temp
LAR1
L LB [AR1,P#0.0]
T #Schalt_punkte
求助,这段代码什么意思。越详细越好,尤其是句和第三句,这其中Bits_Temp是16位word,比如说是CF5F,那么 P##Bits_Temp的值是什么?另外,AR1地址寄存器有什么特殊意义,为什么要把值传到AR1,LB又是什么?求解,越详细越好,知道是什么但是实在不明白这么做的意义
佳答案
首先建议你去了解西门子间接寻址和指针(百度下就有)。。假设此段程序是在FC1里面的。。
L P##Bits_Temp//在这里,#Bits_Temp是个临时变量,在调用FC1时系统会根据变量申明表(里面有关于此变量的起始地址和数据类型)给此变量在L堆栈里分配个地址。此条指令就是把这个变量的地址装入到ACCU1中。
LAR1
L LB [AR1,P#0.0]
T #Schalt_punkte
至于其他的几条指令楼上说的是对的。。下面我说说 为啥要这样编程:从程序中可以看出变量#Schalt_punte为字节型(8位),而变量#Bits_Temp为字型(有2个字节),此程序的目的在于把变量#Bits_Temp的个字节里面的数据赋给变量#Schalt_punte。。因为两个变量的数据类型对不上,所以不可能直接传送,因此只有先找到这个变量的存储位置,才能把它的个字节拿出来赋给变量#Schalt_punte。。
还有建议你去百度下“西门子间接寻址和指针”,把这个弄清楚再结合我说的你就明白了。。