该类指令包括移位、循环和移位寄存器指令。移位指令在程序中可方便某些运算的实现,如对2的乘法和除法运算;可用于取出数据中的有效数字;可实现步进控制。在该类指令中,LAD与STL指令格式中的缩写表示是不同的。
1.移位指令(Shift)
该指令有左移和右移两种,即将输入IN左移或右移N位后,把结果输出到OUT中。移出位自动补零。根据所移位数的不同可分为字节型、字型和双字型。如果所需移位次数大于或等于8(字节)、16(字)、32(双字)等移位最大值,则按最大值移位。移位数据存储单元的移出端与SM1.1(溢出)相连,所以最后被移出的位被放到SM1.1位存储单元。如果移位操作的结果是0,零存储器位(SM1.0)就置位。字节的移位是无符号的,对于字和双字操作,当使用有符号的数据时,符号位也被移动。表4-5给出了以上指令的表达形式及操作数。
表4-5 字节、字、双字移位指令
续表
使ENO=0(指令错误)的条件:间接寻址(0006)。受影响的SM标志位:零(SM1.0)、溢出(SM1.1)。
2.循环移位指令(Rotate)
循环移位指令包括循环左移和循环右移。该指令是把输入端IN循环左移或右移N位,把结果输出到OUT中。循环移位位数分别为字节、字或双字。循环数据存储单元的移出端与另一端相连,同时又与SM1.1(溢出)相连,所以最后被移出的位移到另一端的同时,也被放到SM1.1位存储单元。如果移位次数设定值大于8(字节)、16(字)、32(双字),则在执行循环移位之前,系统先对设定值取以数据长度为底的模,用小于数据长度的结果作为实际循环移位的次数。字节的操作是无符号的,对于字和双字操作,当使用有符号的数据时,符号位也被移动。表4-6给出了以上指令的表达形式及操作数。
表4-6 循环移位指令
使ENO=0(指令错误)的条件:间接寻址(0006)。受影响的SM标志位:零(SM1.0)、溢出(SM1.1)。
3.寄存器移位指令(Shift Register)(www.xing528.com)
该指令在梯形图中有3个数据输入端。DATA为数值输入,将该位的值移入移位寄存器。S_BIT为移位寄存器的最低位端。N指定移位寄存器的长度和方向,最大长度为64位。N为“+”时左移,移位是从最低字节的最低位(S-BIT)移入,从最高字节的最高位移出。N为“-”时右移,移位是从最高字节的最高位移入,从最低字节的最低位(S_BIT)移出。移位寄存器存储单元的移出端与SM1.1(溢出)相连,最后被移出的位放在SM1.1位。移位时,移出位进入SM1.1,另一端自动补上DATA移入位的值。每次使能输入有效时,在每个扫描周期内,整个移位寄存器移动一位。所以要用边沿跳变指令来控制使能端的状态,不然该指令就失去了应用的意义。表4-7给出了该指令的表达形式及操作数。
表4-7 移位寄存器指令
使ENO=0(指令错误)的条件:间接寻址(0006)。受影响的SM标志位:零(SM1.0)、溢出(SM1.1)。
操作数超出范围(0091)。
最高位的计算方法:[N的绝对值-1+(S-BIT的位号)]/8,余数即是最高位的位号,商与S-BIT的字节号之和即是最高位的字节号。如果S-BIT是V33.4,N是14,则(14-1+4)/8=2余1。所以,最高位字节号算法是:33+2=35,位号为1,即移位寄存器的最高位是V35.1。
【例4-3】移位和循环移位指令示例如图4-3所示。
图4-3 移位和循环移位指令示例
【例4-4】移位寄存器指令示例如图4-4所示。
图4-4 移位寄存器指令示例
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。