为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

移位和循环

2013-12-18 7页 pdf 216KB 58阅读

用户头像

is_045369

暂无简介

举报
移位和循环 9.12 SIMATIC 移位和循环指令 字节右移位和左移位 字节左移位指令 (SLB) 或右移位指令 (SRB) 把输入字节 (IN) 左 移或右移N位后 再把结果输出到 OUT 字节 移位指令对移出位自动补零 如果所需移位次数N大于或等于 8 那么实际最大可移位数为 8 如果所需移位次数大于零 那么溢出位 (SM1.1) 上就是最近移出 的位值 如果移位操作的结果是 0 零存储器位 (SM1.0) 就置 位 字节左移位或右移位操作是无符号的 使 ENO = 0 的错误条件是 SM4.3 (运行...
移位和循环
9.12 SIMATIC 移位和循环指令 字节右移位和左移位 字节左移位指令 (SLB) 或右移位指令 (SRB) 把输入字节 (IN) 左 移或右移N位后 再把结果输出到 OUT 字节 移位指令对移出位自动补零 如果所需移位次数N大于或等于 8 那么实际最大可移位数为 8 如果所需移位次数大于零 那么溢出位 (SM1.1) 上就是最近移出 的位值 如果移位操作的结果是 0 零存储器位 (SM1.0) 就置 位 字节左移位或右移位操作是无符号的 使 ENO = 0 的错误条件是 SM4.3 (运行时间) 0006 (间接寻址) 这些指令影响下面的特殊存储器位 SM1.0 (零) SM1.1 (溢出) 输入/输出 操 作 数 数据类型 IN VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *LD 常数 BYTE OUT VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *LD BYTE N VB, IB, QB, MB, SB, SMB, LB, AC, 常数, *VD, *AC, *LD BYTE 字左移位或右移位 字左移位指令 (SLW) 或右移位指令 (SRW) 把输入字 (IN) 左移或 右移 N 位后 再把结果输出到字 OUT 移位指令会对移出位自动补零 如果所需移位次数 N大于或等 于 16 那么实际最大可移位数为 16 如果所需移位数大于零 那么溢出位 (SM1.1) 上就是最近一次移出的位值 如果移位操作 的结果是0 零存储器位 (SM1.0) 就置位 字左移位或右移位操作是无符号的 使 ENO = 0 的错误条件是 SM4.3 (运行时间) 0006 (间接寻址) 这些指令影响下面的特殊存储器位 SM1.0 (零) SM1.1 (溢出) 输入/输出 操 作 数 数据类型 IN VW, IW, QW, MW, SW, SMW, LW, T, C, AIW, AC, 常数, *VD, *AC, *LD WORD N VB, IB, QB, MB, SB, SMB, LB, AC, 常数, *VD, *AC, *LD BYTE OUT VW, IW, QW, MW, SW, SMW, LW, T, C, AC, *VD, *AC, *LD WORD 双字左移位或右移位 双字左移位指令 (SLDW) 或右移位指令 (SRDW) 把输入双字 (IN) 左移或右移 N位后 再把结果输出到双字 (OUT) 移位指令会对移出位自动补零 如果所需移位次数N大于或等 于 32 那么实际最大可移位数为 32 如果所需移位次数大于 零 那么溢出位 (SM1.1) 上就是最近一次移出的位值 如果移 位操作的结果是 0 零存储器位 (SM1.0) 就置位 字左移位或右移位操作是无符号的 使 ENO = 0 的错误条件是 SM4.3 (运行时间) 0006 (间接寻址) 这些指令影响下面的特殊存储器位 SM1.0 (零) SM1.1 (溢出) 输入/输出 操 作 数 数据类型 IN VD, ID, QD, MD, SD, SMD, LD, AC, HC, 常数, *VD, *AC, *LD DWORD N VB, IB, QB, MB, SB, SMB, LB, AC, 常数, *VD, *AC, *LD BYTE OUT VD, ID, QD, MD, SD, SMD, LD, AC, *VD, *AC, *LD DWORD 字节循环左移或循环右移 字节循环左移指令 (RLB) 或循环右移指令 (RRB) 把输入字节 (IN) 循环左移或循环右移N位后 再把结果输出到字节 (OUT) 如果所需移位次数大于或等于 8 那么在执行循环移位前 先 对 取以 8 为底的模 其结果 0 7 为实际移动位数 如果所需 移位数为零 那就不执行循环移位 如果执行循环移位的话 那么溢出位 (SM1.1) 值就是最近一次循环移动位的值 如果移位次数不是 8 的整数倍 最后被移出的位就存放到溢出 存储器位 (SM1.1) 如果移位操作的结果是 0 零存储器位 (SM1.0) 就置位 字节循环移位操作是无符号的 使 ENO = 0 的错误条件是 SM4.3 (运行时间) 0006 (间接寻址) 这些指令影响下面的特殊存储器位 SM1.0 (零) SM1.1 (溢出) 输入/输出 操 作 数 数据类型 IN VB, IB, QB, MB, SMB, SB, LB, AC, *VD, *AC, *LD BYTE N VB, IB, QB, MB, SMB, SB, LB, AC, 常数, *VD, *AC, *LD BYTE OUT VB, IB, QB, MB, SMB, SB, LB, AC, *VD, *AC, *LD BYTE 字循环左移或循环右移 字循环左移指令 (RLW) 或右移指令 (RRW) 把输入字 (IN) 循环 左移或循环右移 N 位后 再把结果输出到字 (OUT) 如果所需移位次数大于或等于 16 那么在执行循环移位前 先 对 N取以 16 为底的模 其结果 0 15 为实际所移位数 如果 所需移位数为零 那就不执行循环移位 如果执行循环移位的 话 那么溢出位 (SM1.1) 上的值就是最近一次循环移动位的 值 如果移位次数不是 16 的整数倍 最后被移出的位就存放到溢出 存储器位 (SM1.1) 如果移位操作的结果是 0 零存储器位 (SM1.0) 就置位 字循环移位操作是无符号的 使 ENO = 0 的错误条件是 SM4.3 (运行时间) 0006 (间接寻址) 这些指令影响下面的特殊存储器位 SM1.0 (零) SM1.1 (溢出) 输入/输出 操 作 数 数据类型 IN VW, T, C, IW, MW, SMW, AC, QW, LW, AIW, 常数, *VD, *AC, SW, *LD WORD N VB, IB, QB, MB, SMB, LB, AC, 常数, *VD, *AC, SB, *LD BYTE OUT VW, T, C, IW, QW, MW, SMW, LW, AC, *VD, *AC, SW, *LD WORD 双字循环左移或循环右移 双字循环左移指令 (RLD) 或循环右移指令 (RRD) 把输入双字 (IN) 循环左移或循环右移 N 位 再把结果输出到双字 (OUT) 如果所需移位次数 N 大于或等于 32 那么在执行循环移位 前 先对 N 取以 32 为底的模 其结果 0 31 为实际所移位 数 如果所需移位数为零 那就不执行循环移位 如果执行循 环移位的话 那么溢出位 (SM1.1) 上的值就是最近一次循环移 动的值 如果移位次数不是 32 的整数倍 最后被移出的位就存放到溢 出存储器位 (SM1.1) 如果移位操作的结果是 0 零存储器位 (SM1.0) 就置位 字循环移位操作是无符号的 使 ENO = 0的错误条件是 SM4.3 (运行时间) 0006 (间接寻址) 这些指令影响下面的特殊存储器位 SM1.0 (零) SM1.1 (溢出) 输入/输出 操 作 数 数据类型 IN VD, ID, QD, MD, SMD, LD, AC, HC, 常数, *VD, *AC, SD, *LD DWORD N VB, IB, QB, MB, SMB, LB, AC, 常数, *VD, *AC, SB, *LD BYTE OUT VD, ID, QD, MD, SMD, LD, AC, *VD, *AC, SD, *LD DWORD 移位和循环举例 LAD STL LD I4.0 RRW AC0, 2 SLW VW200, 3 I4.0 ROR_W EN IN N AC0 2 OUT AC0 SHL_W EN IN N VW200 3 OUT VW200 应 用 循环前 AC0 零存储器位(SM1.0) = 0 溢出存储器位(SM1.1) = 0 x 溢出 1010 0000 0000 0000 第 1次循环后 AC0 1 溢出 0101 0000 0000 0000 第 2次循环后 AC0 0 溢出 0100 0000 0000 0001 移位前 VW200 零存储器位(SM1.0) = 0 0溢出存储器位(SM1.1) = 1 x 溢出 1100 0101 0101 1010 第 1 次移位后 VW200 1 溢出 1000 1010 1011 0100 第 2次移位后 VW200 1 溢出 1110 0010 1010 1101 0001 0101 0110 1000 第 3次移位后 shiftVW200 1 溢出 循环 移位 FBD ROR_W EN IN N AC0 2 OUT AC0 SHL_W EN IN N VW200 3 OUT VW200ENO ENO ENO ENOI4.0 图 9-39 移位和循环指令的 LAD STL 和 FBD 举例 位移位寄存器指令 位移位寄存器指令 (SHRB) 把输入的 DATA 数值移入移位寄存 器 而该移位寄存器是由 S-BIT 和 N 决定的 其中 S-BIT 指 定移位寄存器的最低位 N指定移位寄存器的长度 (正向移位 = N 反向移位= -N) SHRB 指令的位被放再溢出位 (SM1.1) 使 ENO = 0 的错误条件是 SM4.3 (运行时间) 0006 (间接寻 址) 0091 (操作数超界) 0092 (计数区错误) 这些指令影响下面的特殊存储器位 SM1.1 (溢出) 输入/输出 操 作 数 数据类型 DATA, S_BIT I, Q, M, SM, T, C, V, S, L BOOL N VB, IB, QB, MB, SMB, LB, AC, 常数, *VD, *AC, SB, *LD BYTE 0001 0101 0110 1000 零存储器位 SM1.0 =0 溢出存储器位 SM1.1 =1 对位移位寄存器指令的理解 位移位寄存器指令提供了一种排列和控制产品流或数据流的简单方法 在每个扫描周期 整个移位 寄存器移动一位 此移位寄存器由 S-BIT 和 N 决定 图 9-41 为位移位寄存器应用举例 位移位寄存器的最高位 (MSB.b) 可通过下面公式计算求得 MSB.b = [ (S-IT 的字节号) + ([N - 1] + (S-BIT 的位号)) / 8 的商] . [除 8 的余数] 因为 S-BIT 也是移位寄存器中的一位 故必须减 1 例如 如果 S-BIT 是 V33.4 N 是 14 那么 MSB.b 是 V35.1 或 MSB.b = V33 + ([14] - 1 +4) /8 = V33 + 17/8 = V33 + 2 (余数为 1) = V35.1 位移位寄存器移位方向由 N 的正负决定 反移时 N 为负 输入数据从最高位移入 最低位 (S- BIT) 移出 正移时 N 为正 输入数据从最低位 (S-BIT) 移入 最高位移出 移出的数据放在溢出存储器位 (SM1.1) 移位寄存器的最大长度是 64 位 可正可负 图 9–40 为两 种不同方向的移位 7 4 0V33 MSB LSB 正向移位 长度 N= 14 S_BIT 7 0V34 7 0V35 1 位移位寄存器的最高位 7 4 0V33 MSB LSB 反向移位 长度N= -14 S_BIT 7 0V34 7 0V35 1 位移位寄存器的最高位 图 9-40 正移 反移时位移位寄存器的入口与出口 位移位寄存器指令举例 LAD STL LD I0.2 EU SHRB I0.3, V100.0, 4 I0.2 SHRB DATAI0.3 P S_BITV100.0 N4 I0.2 时 序 图 I0.3 7 1V100 MSB LSB S_BIT I0.3010 0 溢出位 (SM1.1) x 1V100 S_BIT I0.3101 溢出位 (SM1.1) 0 0V100 S_BIT I0.3110 溢出位 (SM1.1) 1 第 1次移位 第 2次移位 第 1次移位前 第 1次移位后 第 2次移位后 正跳变 FBD SHRB EN DATAI0.3 S_BITV100.0 N4 ENO ENOEN OUTINI0.2 P 图 9- 41 位移位寄存器的 LAD STL 和 FBD 应用举例
/
本文档为【移位和循环】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索