A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态
=Q[MD2] //赋值给Q6.5
--------
A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态
=Q[MW100] //错误!!没有Q10这个元件
---------------------------------------------------------------------------------------------------
从上面系列举例我们至少看出来一点:
单字指针只应用址标识符是非位情况下。确,单字指针前面描述过,它确定数值是0-65535,而byte.bit这种具体位结构来说,只能用双字指针。这是它们第一个区别,单字指针一个限制就是,它只能对T、C、DB、FC和FB进行寻址,通俗说,单字指针只可以用来指代这些存储区域编号。
相单字指针,双字指针就没有这样限制,它可以对位址进行寻址,还可以对BYTE、WORD、DWORD寻址,没有区域限制。,有必有失,对非位区域进行寻址时,必须确保其0-2bit为全0!
一下:
单字指针存储器间接寻址只能用址标识符是非位场合;双字指针有位格式存,对址标识符没有限制。也正是双字指针是一个具有位指针,,当对字节、字双字存储区址进行寻址时,必须确保双字指针内容是8倍数。
现,我们来分析一下上述例子中A I[MD104] 为什么Zui后是对I1.2进行与逻辑操作。
L L#+10 ,我们知道存放MD104中值应该是:
MD104:0000 0000 0000 0000 0000 0000 0000 1010
当作为双字指针时,就应该3-18bit指定byte,0-2bit指定bit来确定Zui终指令要操作址,:
0000 0000 0000 0000 0000 0000 0000 1010 = 1.2
详解西门子间接寻址(二)
【址寄存器间接寻址】
先前所说存储器间接寻址中,间接指针用M、DB、DI和L直接指定,就是说,指针指向存储区内容就是指令要执行确切址数值单元。但寄存器间接寻址中,指令要执行确切址数值单元,并非寄存器指向存储区内容,也就是说,寄存器本身也是间接指向真正址数值单元。从寄存器到出真正址数值单元,西门子提供了两种途径:
1、区域内寄存器间接寻址
2、区域间寄存器间接寻址
址寄存器间接寻址一般格式是:
〖址标识符〗〖寄存器,P#byte.bit〗,比如:DIX[AR1,P#1.5] 或 M[AR1,P#0.0]。
〖寄存器,P#byte.bit〗统称为:寄存器寻址指针,而〖址标识符〗上帖中谈过,它包含〖存储区符〗+〖存储区尺寸符〗。但这里,情况有所变化。比较一下刚才例子:
DIX [AR1,P#1.5]
X [AR1,P#1.5]