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

上传人:本田雅阁 文档编号:2588617 上传时间:2019-04-13 格式:PPT 页数:23 大小:332.51KB
返回 下载 相关 举报
间接寻址及地址寄存器指令.ppt_第1页
第1页 / 共23页
间接寻址及地址寄存器指令.ppt_第2页
第2页 / 共23页
间接寻址及地址寄存器指令.ppt_第3页
第3页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《间接寻址及地址寄存器指令.ppt》由会员分享,可在线阅读,更多相关《间接寻址及地址寄存器指令.ppt(23页珍藏版)》请在三一文库上搜索。

1、间接寻址及地址寄存器指令,L W AR1, P#200.0,- - - -,1,2,9,10,#Ini_Value,#Par_Pointer,#Counter,?,?,?,STEP 7 中可能的寻址方式,寻址方式,直接寻址,间接寻址,绝对寻址,符号寻址,存储器间接寻址,寄存器间接寻址,示例: A I 4.0 A “Mot_on“ OPN DBMW10 A IMD30 A IAR1,P#0.0 A AR1,P#0.0 L IW10 L #Num SP T“runtime“ L IW“Number“ L IDAR1,P#5.0 T WAR1,P#0.0,16位指针 (DB, T, C),32位指针

2、 内部区域,32位指针 内部区域,32位指针 交叉区域,变量直接寻址,存储单元位置 (示例),I,37.4,地址,附加访问宽度,字节,字,双字,含义,输入,Q,27.7,字节,字,双字,输出,PIB,655,字节,字,双字,外设输入,PQB,653,字节,字,双字,外设输出,M,55.0,字节,字,双字,位(Bit)存储器,T,114,-,定时器,C,13,-,计数器,DBX,2001.6,字节(DBB), 字(DBW), 双字(DBD),通过DB寄存器寻址的数据,DIX,406.1,字节(DIB), 字(DIW), 双字(DID),通过DI寄存器寻址的数据,L,88.5,字节(LB), 字(

3、LW), 双字 (LD),本地数据堆栈,DB中地址标识符直接寻址,打开的数据块,在数据块中装载和传递,OPN DB 19 OPN “Values“ OPN DI 20 组合指令 (包含OPN D DB),L DBB 1 装载数据字节1 L DBW 2 装载数据字2(字节2/3) L 5 装载数字5 T DBW 4 传递到字4 L A 装载ASCII字符A L DIB28 装载数据字节28 =I 比较 A DBX 0.0 从0字节的第0位开始扫描 L DB19.DBW4 从DB 19中装载数据字4 L “Values”.Number_1 符号访问变量 Number_1. DB19 具有变量名“V

4、alues” A DB10.DBX4.7 从DB 10 的第4个字节的第7位开始扫描,用于DB寄存器的指令: CDB:交换DB寄存器内容 将DB寄存器内容装载到ACCU1中 L DBNO (将打开的DB号装载到ACCU1中) L DINO (将打开的DI号装载到ACCU1中) 装载数据块长度 L DBLG (将打开的DB的长度/字节装载到ACCU1中) L DILG (将打开的DI的长度/字节装载到ACCU1中),在程序中分析数据块DB相关信息,指令执行前:,指令执行后:,CDB,123,24,24,123,DB寄存器,DI寄存器,字格式的16位指针(用于对DB、T、C进行寻址) L 11 T

5、 MW 60 OPN DBMW 60 OPN DB 11 双字格式的32位指针(用于对I、Q、M.进行寻址) L P#24.0 T MD 50 L I W MD50 L IW 24 存储 访问 地址 区域 宽度,存储器间接寻址,用于存储器间接寻址的指针结构,16位指针的结构: 为0 . 65 535 之间的无符号整数,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,20,215,27,146,32位指针的结构(内部区域):,B,B,B,B,B,B,B,B,B,B,B,B,B,X,X,X,15 14 13

6、 12 11 10 9 8 7 6 5 4 3 2 1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,B,B,B,31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16,20,22,位地址,字节地址(无符号整数),20,215,未定义,装载32位指针常量(内部区域): L P#25.3 (P = 指针,字节地址= 25,位地址:3),存储器间接寻址的特性,用于存储16位和32位指针的地址区域: 位(Bit)存储区(绝对寻址或符号寻址) 例如: OPN DBMW30,OPN DI“Motor_1” 等。 A IMD30,T QD“Speed_1“

7、,等) 本地数据堆栈(绝对寻址或符号寻址, 例如: OPN DBLW10,OPN DI#DB_NO等。 A ILD10,T QD#Par_Pointer,等。) 全局(共享) 数据块(只能进行绝对寻址,DB必须预先打开, 例如: OPN DBDBW0 (覆盖掉DB寄存器内容!),OPN DIDBW22等。 A IDBD10,T QDDBD22,等。) 背景数据块(只能进行绝对寻址,DI必须预先打开, 例如: OPN DBDIW20,OPN DIDIW0 (覆盖掉DI寄存器内容!),等。 A IDID10, T QDDID22等。) 向FB和FC传递指针的特点 在参数里传递的指针不能直接用于存储

8、器间接寻址。 用于存储器间接寻址而传递的指针,在访问之前必须拷贝到临时变量里去,间接寻址示例,FC30:间接寻址示例 Network(段) 1:使用间接寻址方式打开DB L #dbnumber / 将DB号拷贝到MW100 T MW 100 / OPN DBMW 100 / 打开DB Network (段) 2: 循环删除 L P#18.0 / 将终端地址(DBW18)作为指针 T MD 40 / 传送到MD 40; L 10 / 将循环计数器值设置为10 next: T MB 50 / 传到MB 50中; L 0 / 装载初始值 T DBWMD 40 / 传到DB50中; L MD 40 /

9、 装载指针 L P#2.0 / 并减去2个字节 -D / 然后再传回 T MD 40 / 到MD 40; L MB 50 / 装载循环计数器 LOOP next / 减去2个字节,条件满足则跳转;,练习4.1:用间接寻址的方法进行循环编程,- - - -,Meas_Value1,Meas_Value2,Meas_Value9,Meas_Value10,Meas_Value11,#Ini_Value,1.0,2.0,9.0,10.0,11.0 . . .,等等。,DB41,0,4,32,36,40,DB中指向地址的指针,#Par_Pointer,#Counter,字节地址,内部区域,寄存器间接寻

10、址,LAR1 P#10.0 / 设置AR1 AR1: 00000000 0000 0000 0000 0000 0101 0000 + 200 L M W AR1, P#200.0 存储区域 访问 地址 偏移 扩展指令: L MW 210 宽度 寄存器 常量,AR 1或AR2中的内部区域指针:,B,B,B,B,B,B,B,B,B,B,B,B,B,X,X,X,15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,B,B,B,31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16,20

11、,22,位地址,字节地址(无符号整数),20,215,未定义,指令语法规则:,交叉区域,寄存器间接寻址,LAR1 P#I10.0 /设置AR1 AR1: 10000001 0000 0000 0000 0000 0101 0000 L W AR1, P#200.0 + 200 访问 地址 偏移 扩展指令: L IW 210 宽度 寄存器 常量,AR 1或AR 2中的交叉区域指针:,B,B,B,B,B,B,B,B,B,B,B,B,B,X,X,X,15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,1,0,0,0,0,R,R,R,0,0,0,0,0,B,B,B,31 30

12、29 28 27 26 25 24 23 22 21 20 19 18 17 16,位地址,字节地址(无符号整数),地址标识符,指令语法规则:,Bit 31=0: 内部区域 Bit 31=1: 交叉区域,地址标识符: 000 I/O 001 输入(PII) 010 输出(PIQ) 011 位(Bit)存储器 100 DB寄存器中的数据 101 DB寄存器2中的数据(DI) 110 自有本地数据 111 调用块的LD(本地数据),用于装载地址寄存器的指令,装载地址寄存器 LARn (n =1 or 2): 将ACCU1中的内容装载到ARn LARn 将中的内容装载到ARn LARn P# 将中的

13、地址装载到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_

14、Pointer, 等) FB: IN-,OUT-, INOUT-,STAT- 及TEMP- FC:TEMP(临时)变量(LAR1 P#Loop,等),其它用于地址寄存器的指令,传送出地址寄存器内容 TARn (n =1 or 2): 从Arn传送到ACCU1 TARn 从Arn传送到 : 处理器寄存器: AR2 (比如:TAR1 AR2 ) 32位绝对地址变量: MDn, LDn, DBDn, DIDn (如TAR2 MD5等) 32位符号变量: 32位全局变量(比如TAR1 “Index”,等) (全局和局域的) 及OB,FB及FC的TEMP(临时)变量 (比如TAR1 #Address等)

15、 地址寄存器内容交换(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寄存器内容将会被覆盖掉

16、。 在装载地址寄存器和对目标变量进行寄存器间接寻址的时候,不允许 访问局部参数 在STL/LAD/FBD编辑器内使用AR2 在对FB内部所有参数和静态变量进行寻址的时候,AR2寄存器和DI寄存器均用作基址寄存器。 如果用户在FB内部将 AR2或DI覆盖了,之后就可以访问该FB专用 参数或静态变量。也就是说,未恢复两个寄存器时不可访问。 在FC内,对AR2寄存器和DI寄存器没有限制,#ACCU1,DB中指向地址的指针,#AR1,#ACCU2,- - - -,Number1,Number2,Number9,Number10,Number11,1,2,9,10,11 . . .,等等。,DB42,0

17、,4,32,36,40,字节地址,练习4.2:用寄存器间接寻址进行循环编程,POINTER类型和ANY类型数据的块参数,地址 声明 名称 类型 0.0 输入参数 DB_Num WORD 2.0 输入参数 Area_Pointer DWORD 6.0 输入参数 Length WORD . . . L #DB_Num T #I_DB_Num OPN DBI_DB_Num . L #Area_Pointer LAR1 L #Length .,FC.,分别传送实际地址的各个信息 (STEP 5里的方式): DB号 起始地址 区域长度,等。 缺点: 程序员必须进行拆分 在调用期间,不能使用实际地址的符号

18、名 一个地址(区域)需要好几个参数 无一致性检查纠正,地址 声明. 名称 类型 0.0 输入 Measure_1 POINTER . . . 8.0 输入 Measure_2 ANY . . . L P#Measure_1 LAR1 L WAR1,P#0.0 T #I_DB_Num OPN DBI_DB_Num L DAR1,P#2.0 LAR1 ,FC.,使用POINTER或ANY类型参数传递 (STEP 7方式): 调用时,程序员可以使用实际地址的符号名 由LAD/FBD/STL编辑器拆分成单个信息 一个地址只需要一个参数 进行一致性检查纠正,POINTER类型的结构和参数赋值,Byte

19、n,Byte n+2,Byte n+4,Byte n+1,Byte n+3,Byte n+5,DB号(INT),1 O O O _ O R R R _ O O O O _ O B B B (32位交叉区域指针),B B B B _ B B B B _ B B B B _ B X X X,POINTER类型参数赋值 指针显示 P#DBn .DBX x.y 其中:n= DB号, x= 字节数, y= 位数 P#DIn .DIX x.y (比如 P#DB5.DBX3.4,P#DI2.DIX10.0,等) P#Zx.y 其中: Z=区域,比如:P,I,Q,M及L (比如P#I5.3,P#M10.0,等

20、) 地址声明: MD30 (这种情况下,DB号区域标识符及位地址自动输入 #Motor_on 到POINTER参数中) “Motor_1“.speed,数据类型结构:POINTER,ANY数据类型的结构,ANY数据类型指针,Byte n,Byte n+2,Byte n+4,DB号,1 O O O _ O R R R _ O O O O _ O B B B,B B B B _ B B B B _ B B B B _ B X X X,16#10,Data type,复制系数,Byte n+6,Byte n+8,数据类型 标识符 VOID 00 BOOL 01 BYTE 02 CHAR 03 WOR

21、D 04 INT 05 DWORD 06 DINT 07 REAL 08 DATE 09 TOD 0A TIME 0B S5TIME 0C DT 0E STRING 13 参数类型 标识符 BLOCK_FB 17 BLOCK_FC 18 BLOCK_DB 19 BLOCK_SDB 1A COUNTER 1C TIMER 1D,ANY参数类型指针,Byte n,Byte n+2,Byte n+4,16#0000,定时器,计数器或块的号,16#10,参数类型,16#0001,Byte n+6,Byte n+8,16#0000,ANY数据类型的参数赋值,指针显示: P#数据块.位地址 类型号 P#D

22、B10.DBX12.0 REAL 20 指向DB10中的一个区域:从 Byte 12开始的20个REAL类型的地址 (ARRAY120 OF REAL) P#I 10.0 BOOL 8 指向IB10里的一个8位区域 地址声明: 绝对地址: DB5.DBD10 数据类型:DWORD,复制系数:1 DB号:5,指针:P#DB5.DBX10.0 IW32 类型:WORD,WF: 1,DB 号:0,指针: P#I 32.0 T35 类型: TIMER,编号:35 符号地址: #Motor_1.speed 使用基本数据类型,编译器建立正确 “Pump”.Start 的数据类型,复制系数1以及指针 注意事

23、项 符号(ARRAY、STRUCT、STRING、UDT)赋值时,数据类型标识符02(BYTE)以及区域字节长度只能由编译器来建立,并输入到ANY指针。,ANY类型间接参数分配,使用临时变量对ANY数据类型进行实际参数赋值 在调用块中声明ANY数据类型临时变量 例如: temp aux_pointer ANY 用指针信息对ANY临时变量进行赋值 例如: LAR1 P#aux_pointer / 装载辅助指针地址 L B#16#10 / 装载标识符10 T LB AR1,P#0.0 / 并传送到Offset 0 L . . 使用变量辅助指针对ANY 块参数进行赋值 例如: CALL FC 111

24、 Targetfield:=#aux_pointer 优点 在运行期间,对ANY指针参数进行动态重复赋值,评估ANY型指针传递,地址 声明 名称 类型 初始值 注释 0.0 in Par_Pointer ANY out in_out 0.0 temp Data_type BYTE 2.0 temp WF WORD 4.0 temp DB_Nr WORD 6.0 temp Area_Pointer DWORD,Network 1:创建数据类型、复制系数、DB号及区域指针 L P#Par_Pointer / 将#Pointer地址装载到ACCU1 LAR1 / 并从ACCU1中将其装载到AR1;

25、L B AR1,P#1.0 / 从指针创建数据类型 T #Data_type / 并装载到临时变量中; L W AR1,P#2.0 / 建立复制系数 T WF / 并装载到临时变量中; L W AR1,P#4.0 / 建立DB号 T #DB_Nr / 并装载到临时变量中; L D AR1,P#6.0 / 建立区域指针 T #Area_Pointer / 并装载到临时变量中;,练习4.3:用于求和及计算平均值的功能,FC 43,EN,ENO,Measured_values,Sum,Mean_value,声明 名称 类型 输入参数 Measured_values ANY 输出参数 Sum REAL 输出参数 Mean_value REAL,DB43,103.45,2086.5,1.7895,P#DB43.DBX0.0 REAL 8,名称 类型 STRUCT Measurement ARRAY18 REAL END_STRUCT,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1