STEP7编程地址概念详解
LAR1
与
L MD100
LAR1
有什么区别?
当将MD100以这种 [MD100] 形式表示时,你既要在对MD100赋值时考虑到所赋的值是否符合存储器间接寻址双字指针的规范,又要在使用这个寻址格式作为语句一部分时,是否符合语法的规范。
在你给出第一个例程的第一句:L [MD100]上,我们看出它犯了后一个错误。
存储器间接寻址指针,是作为指定的存储区域的确切数值单元来运用的。也就是说,指针不包含区域标识,它只是指明了一个数值。因此,要在 [MD100]前加上区域标识如: M、DB、I、Q、L等,还要加上存储区尺寸大小如:X、B、W、D等。在加存储区域和大小标识时,要考虑累加器加载指令L不能对位地址操作,因此,只能指定非位的地址。
为了对比下面的寄存器寻址方式,我们这里,修改为:L MD[MD100]。并假定MD100=8Hex,同时我们也假定MD1=85000018Hex。
当把MD100这个双字作为一个双字指针运用时,其存储值的0-18bit将会按照双字指针的结构Byte.bit来重新“翻译”,“翻译”的结果才是指针指向的地址,因而MD100中的8Hex=1000B=1.0,所以下面的语句:
L MD[MD100]
LAR1
经过“翻译”就是:
L MD1
LAR1
前面我们已经假定了MD1=85000018,同样道理,MD1作为指针使用时,对0-18bit应该经过Byte.bit结构的“翻译”,由于是传送给AR地址寄存器,还要对24-31bit进行区域寻址“翻译”。这样,我们得出LAR1中最终的值=DIX3.0。就是说,我们在地址寄存器AR1中存储了一个指针,它指向DIX3.0。