立即寻址是对操作数是常数或常量的寻址方式,其特点是操作数值直接表示在指令中,出现在指令中的操作数称为立即数。有些指令的操作数是唯一的,为简化起见,并不在指令中写出。
立即寻址方式可用来提供常数、设置初值等。常数值可分为字节、字、双字型等数据。CPU以二进制方式存储所有常数。在指令中可用十进制、十六进制、ASCII码或浮点数形式来表示操作数。
立即寻址示例:
SET 说明:把RLO置1
OW W#16#320 将常量W#16#320与ACCU1“或”运算
L 1352 把整数1352装入ACCU1
L‘ABCD’ 把ASCII码字符ABCD装入ACCU1
L C#100 把BCD码常数100(计数值)装入ACCU1
AW W#16#3A12 常数W316#3 A12与ACCU1的低位相“与”,运算结果在ACCU1的低字中。
存储器直接寻址包括对寄存器和存储器的直接寻址。在直接寻址的指令中,直接给出操作数的存储单元地址,包括寄存器或存储器的区域、长度和位置,根据这个地址就可以立即找到该数据。例如,用MW200指定位存储区中的字,地址为200;MB100表示以字节方式存取,MW100表示存取MB100、MB101组成的字,MD100表示存取MB100~ MB103组成的双字。在指令中,数据类型应与指令标识符相匹配。
直接寻址编程示例:
A IO.0 说明:对输入位10.0进行“与”逻辑操作
S L20.0 把本地数据位I20.0置“l”
= M115.4 使存储区位M115.4的内容等于RLO的内容
L IB10 把输入字节IB10的内容装入ACCU1
T DBD12 把ACCU1中的内容传送给数据双字DBD12中。
存储器间接寻址简称间接寻址。该寻址方式在指令中以存储器的形式给出操作数所在存储器单元的地址,也就是说该存储器的内容是操作数所在存储器单元的地址。该存储器一般称为地址指针,在指令中需写在方括号“[]”内。地址指针可以是字或双字。对于地址范围小于65 535(即16位二进制数所表示的最大值)的存储器(如T、C、DB、FB、FC等)可以用字指针,其指针格式如图所示。对于其他存储器(如I、Q、M等)则要使用双字指针。如果要用双字指针访问字节、字或双字存储器,必须保证指针的位编号为0,只有双字MD、LD、DBD和DID能作双字地址指针,存储器间接寻址的双字指针的格式如图所示,位0~2(XXX)为被寻址位的位编号(范围0~7),位3—l8为被寻址字节的字节编号(范围0~65 535)。
图 存储器间接寻址的字指针格式
图 存储器间接寻址的双字指针格式
存储器间接寻址的单字格式的指针寻址示例:
L2 说明:将数字2#0000_0000_0000_0010装入累加器1
T MW50 将累加器l低字中的内容传给MW50作为指针值
OPN DB35 打开共享数据块DB35
L DBW[MW50] 将共享数据块DBW2的内容装入累加器1
存储器间接寻址的双字格式的指针寻址示例:
上面程序中Q[MD2]中的MD2称为地址指针,其里面的数值代表地址。
使用存储器间接寻址,该存储器的值是操作数的地址,因此改变了存储器的值就相当于改变了操作数的地址,在循环程序中经常使用存储器间接寻址。
寄存器间接寻址简称寄存器寻址。在S7中有两个地址寄存器,分别是AR1和AR2。通过地址寄存器,可以对各存储区的存储器内容实现寄存器间接寻址。地址寄存器的内容加上偏移量形成地址指针,该指针指向数值所在的存储单元。地址寄存器及偏移量必须写在方括号“[]”内。寄存器间接寻址的语句不改变地址寄存器中的数值。用寄存器指针访问一个字节、字或双字时,必须保证地址指针中位地址编号为0。
地址寄存器的地址指针有两种格式,其长度均为双字,指针格式如图所示。
图 存储器间接寻址的指针格式