1.有符号数右移指令
语句表中的SSI和SSD指令将有符号数(整数和双整数)右移若干位(见表3-15)。右移后高端空出来的位填上符号位对应的二进制数,正数的符号位为0,负数的符号位为1。最后移出的位被装载到状态位CC1。
表3-15 移位指令
图3-92中的整数右移指令SHR_I将MW40中的16位有符号整数右移4位。-8000右移4位相当于除以24,移位后的数为-500。从图3-93中的变量表可以看出,右移后空出来的位用符号位1填充。移位位数N的数据类型为WORD,其常数用十六进制数表示。N如果大于等于16,原有的数据被全部移出去了,MW42的各位均为符号位。
图3-92的右边是移位指令对应的语句表程序,被移位的数在累加器1,移位的位数可以用指令中的参数<number>来指定,也可以放在累加器2的最低字节。移位位数的允许值为0~255。如果移位位数等于0,移位指令被当作NOP(空操作)指令来处理。
图3-92 有符号整数右移指令
图3-93 变量表
2.无符号数移位指令
无符号的字(Word)和双字(DWord)可以左移和右移,移位后空出来的位填以0。
图3-94是无符号字左移4位的移位指令,50左移4位相当于乘以24,移位后的数为800,左移后空出来的低4位添0。从变量表可以看到左移4位的结果(见图3-95)。
如果移位前后的地址(IN、OUT)相同,应在I0.4的触点右边添加一个上升沿检测元件,否则在I0.4为1的每个扫描周期都要移位一次。
图3-94 无符号字左移指令(www.xing528.com)
图3-95 变量表
3.循环移位指令
语句表中的循环移位指令(见表3-16)将累加器1的整个内容逐位循环左移或循环右移0~32位,循环移位的位数可以用指令中的参数<number>来指定,也可以放在累加器2的最低字节。移位位数等于0时,循环移位指令被当作NOP(空操作)指令来处理。
表3-16 循环移位指令
图3-96和图3-97给出了双字循环左移8位的例子。从MD50的高8位移出来的位送入MD54低8位空出来的位,最后移出的位保存到状态字的CC1位。
图3-96 双字循环左移指令
图3-97 变量表
4.累加器1的双字通过CC1的循环移位指令
双字通过CC1循环左移指令RLDA将累加器1的整个内容逐位左移1位,移出来的最高位保存到CC1,CC1原有的内容保存到累加器1的最低位。双字通过CC1循环右移指令RR-DA将累加器1的整个内容逐位右移1位,移出来的最低位保存到CC1,CC1原有的内容保存到累加器1的最高位。这两条指令实际上极少使用。
RLDA和RRDA实际上是一种33位(累加器1的32位加状态字的CC1位)的循环移位指令,累加器移出来的位保存到状态字的CC1位,状态字的CC0位和OV位被复位为0。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。