文档详情

间接寻址和地址寄存器指令.ppt

发布:2017-09-05约2.06万字共23页下载文档
文本预览下载声明
间接寻址及地址寄存器指令 STEP 7 中可能的寻址方式 变量直接寻址 DB中地址标识符直接寻址 在程序中分析数据块DB相关信息 用于DB寄存器的指令: CDB:交换DB寄存器内容 将DB寄存器内容装载到ACCU1中 L DBNO (将打开的DB号装载到ACCU1中) L DINO (将打开的DI号装载到ACCU1中) 装载数据块长度 L DBLG (将打开的DB的长度/字节装载到ACCU1中) L DILG (将打开的DI的长度/字节装载到ACCU1中) 存储器间接寻址 用于存储器间接寻址的指针结构 存储器间接寻址的特性 用于存储16位和32位指针的地址区域: 位(Bit)存储区(绝对寻址或符号寻址) 例如: OPN DB[MW30],OPN DI[“Motor_1”] 等。 A I[MD30],T QD[Speed_1],等) 本地数据堆栈(绝对寻址或符号寻址, 例如: OPN DB[LW10],OPN DI[#DB_NO]等。 A I[LD10],T QD[#Par_Pointer],等。) 全局(共享) 数据块(只能进行绝对寻址,DB必须预先打开, 例如: OPN DB[DBW0] (覆盖掉DB寄存器内容!!!),OPN DI[DBW22]等。 A I[DBD10],T QD[DBD22],等。) 背景数据块(只能进行绝对寻址,DI必须预先打开, 例如: OPN DB[DIW20],OPN DI[DIW0] (覆盖掉DI寄存器内容!!!),等。 A I[DID10], T QD[DID22]等。) 向FB和FC传递指针的特点 在参数里传递的指针不能直接用于存储器间接寻址。 用于存储器间接寻址而传递的指针,在访问之前必须拷贝到临时变量里去 间接寻址示例 练习4.1:用间接寻址的方法进行循环编程 内部区域,寄存器间接寻址 交叉区域,寄存器间接寻址 用于装载地址寄存器的指令 装载地址寄存器 LARn (n =1 or 2): 将ACCU1中的内容装载到ARn LARn 地址 将地址中的内容装载到ARn LARn P#地址 将地址中的地址装载到ARn 地址: 处理器寄存器: AR1,AR2 (比如: LAR1 AR2 及LAR2 AR1) 32位变量: MD,LD, DBD,DID (比如: L DBD5等) 32位符号变量: 32位全局变量(比如: LAR1 “索引”,等) (全局和局域的) 以及OB,FB及FC的TEMP(临时)变量 (比如: LAR1 #Address,等) P#地址 指向布尔型绝对地址 En.m,An.m,Mn.m,Ln.m,DBXn.m,DIXn.m 指针: (比如: LAR1 P#M5.3, LAR2 P#I3.6,等) 指向本地、符号地址 OB: TEMP(临时)变量 (比如: LAR1 P##Par_Pointer, 等) FB: IN-,OUT-, INOUT-,STAT- 及TEMP- FC:TEMP(临时)变量(LAR1 P##Loop,等) 其它用于地址寄存器的指令 传送出地址寄存器内容 TARn (n =1 or 2): 从Arn传送到ACCU1 TARn Address 从Arn传送到地址 地址: 处理器寄存器: AR2 (比如:TAR1 AR2 ) 32位绝对地址变量: MDn, LDn, DBDn, DIDn (如TAR2 MD5等) 32位符号变量: 32位全局变量(比如TAR1 “Index”,等) (全局和局域的) 及OB,FB及FC的TEMP(临时)变量 (比如TAR1 #Address等) 地址寄存器内容交换(Swap)指令 TAR 将地址寄存器AR1和AR2的内容相互交换 地址寄存器加指令 +ARn 将ACCU1-L内容加到ARn +ARn P#n.m 将内部区域指针P#n.m加到AR1或AR2中去 寄存器间接寻址的特性 在STL/LAD/FBD编辑器内使用AR1 当访问FC中的参数时,如果参数为复杂数据类型(ARRAY、STRUCT、DATE_AND_TIME) ,则AR1寄存器和DB寄存器内容将会被覆盖掉。 当访问FB中的INOUT参数时,如果该INOUT参数是复杂数据类型(ARRAY、STRUCT、DATE_AND_TIME),则AR1寄存器和DB寄存器内容将会被覆盖掉。 在装载地址寄存器和对目标变量进行寄存器间接寻址的时候,不允许 访问局部参数 在STL/LAD/FBD编辑器内使用AR2 在对FB内部所有参数和静态变量进行寻址的时候,AR2寄
显示全部
相似文档