西门子
的间接寻址方式计有两大类型:
存储器间接寻址和寄存器间接寻址。
【存储器间接寻址】
存储器间接寻址的地址给定格式是:地址标识符
+
指针。指针所指示
存储单元中所包含的数值,
就是地址的确切数值单元。
存储器间接寻址具有两个指针格式:
单字和双字。
单字指针是一个
16bit
的结构,从
0-15bit
,指示一个从
0-65535
的数值,这
个数值就是被寻址的存储区域的编号。
双字指针是一个
32bit
的结构,从
0-2bit
,共三位,
按照
8
进制指示被寻址的位编号,
也就是
0-7
;
而从
3-18bit
,
共
16
位,
指示一个从
0-65535
的数值,这个数值就是被寻址的字节编号。
指针可以存放在
M
、
DI
、
DB
和
L
区域中,也
就是说,可以用这些区域的内容来做指针。
单字指针和双字指针在使用上有很大区别。下
面举例说明:
L DW#16#35 //
将
32
位
16
进制数
35
存入
ACC1 T MD2 //
这个值再存入
MD2
,
这是个
32
位的位存储区域
L
+10
//
将
16
位整数
10
存入
ACC1
,
32
位
16
进制数
35
自动
移动到
ACC2
T
MW100
//
这个值再存入
MW100
,这是个
16
位的位存储区域
OPN
DBW[MW100] //
打开
DBW10
。
这里的
[MW100]
就是个单字指针,
存放指针的区域是
M
区,
MW100
中的值
10
,就是指针间接指定的地址,它是个
16
位的值!
-------- L L#+10 //
以
32
位形式,把
10
放入
ACC1
,此时,
ACC2
中的内容为:
16
位整数
10 T MD104 //
这个值再
存入
MD104
,
这是个
32
位的位存储区域
A I[MD104] //
对
I1.2
进行与逻辑操作!
=DIX[MD2]
//
赋值背景数据位
DIX6.5
!
--------
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
寻址,并且没有区域的限制。不过,有得必有失,在对非位的区域进行寻址时,