大家好,刚看了篇 step7编程之地址概念详解 的文章。作者写的挺详细,但读完后有几个问题,不太明白,所以想请教一下:
1, 原文是:
L P#DB100.DBX26.4 //错误!DBX已经提供了存储区域,不能重复指定。
请问,DBX前面不需要加DB块吗?不加的话,怎么知道它属于哪个DB块?
2, 原文是:
L L#+10 //以32位形式,把10放进ACC1,此时,ACC2中的内容为:16位整数10
T MD104 //这个值再存进MD104,这是个32位的位存储区域
A I[MD104] //对I1.2进行与逻辑操纵!
现在,我们来分析一下上述例子中的A I[MD104] 为什么最后是对I1.2进行与逻辑操纵。
通过L L#+10 ,我们知道存放在MD104中的值应该是:
MD104:0000 0000 0000 0000 0000 0000 0000 1010
当作为双字指针时,就应该按照3-18bit指定byte,0-2bit指定bit来确定终极指令要操纵的地址,因此:
0000 0000 0000 0000 0000 0000 0000 1010 = 1.2
L DW#16#8 // 加载双字16进制数8,当把它用作双字指针时,按照BYTE.BIT结构,
结果演变过程就是:8H=1000B=1.0
T MD 2 // MD2=8H
OPN DB [MW 100] // OPN DB100
L DBW [MD 2] // L DB100.DBW1
T MW[MD2] // T MW1
A DBX [MD 2] // A DBX1.0
= M [MD 2] // =M1.0
这2段话,我还可以理解,但是作者又举个例子:
【将DB100中的1-11数据字,传送到MW1-11中】
L L#1 //初始化循环指针。这里循环指针就是我们要修改的寻址指针
T MD 102
M2: L MD 102
T #COUNTER_D
OPN DB100
L DBW [MD 102]
T MW [MD 102]
L #COUNTER_D
L L#2 // +2,是由于数据字的偏移基准是字节。
+D
T MD 102 //自加减循环指针,这是动态修改了寻址指针的关键
L L#11 //循环次数=n-1。n=6。这是由于,首次进进循环是无条件的,
但已事实上执行了一次操纵。
<=D
JC M2
有关于T MD102 ,L L#11, <=D的具体分析,请按照前面的内容推导。
照我对文章的理解和前面的2个例子,L L#1 中的 L#1 是双字指针,相当于 1H=0001B=0.1, 那么MD102 = 0.1 啊。
麻烦朋友们帮我看看这2个困惑,谢谢。
还有,请问,如何上传附件?