移位指令
移位指令梯形图(lad)
1 移位指令概述
描述
可使用移位指令向左或向右逐位移动输入 in 的内容(另请参阅 cpu 寄存器)。向左移动 n 位相当于将输入端 in 的内容乘以 2 的 n 次幂(2 n);向右移动 n 位则相当于将输入端 in 的内容除以 2 的 n 次幂(2n)。例如,如果将等价于十进制值 3 的二进制数左移 3 位,将得到等价于十进制值 24 的二进制数。
如果将等价于十进制值 16 的二进制数右移 2 位,则会得到等价于十进制值 4 的二进制数。
您提供给输入参数 n 的数值决定了移动相应值的位数。移位指令产生的空位将用零或符号位的信号状态(0 表示正,1 表示负)来填补。后移动的位的信号状态将装入状态字的 cc1 位中(请参见cpu 寄存器)。状态字的 cc0 和 ov 位将复位为 0。您可以使用跳转指令判断 cc1 位。
下列移位指令可用:
· shr_i:整数右移
· shr_di:长整数右移
· shl_w:字左移
· shr_w:字右移
· shl_dw:双字左移
· shr_dw:双字右移
2 shr_i:整数右移
符号
参数
数据类型
存储器区
描述
en
bool
i、q、m、l、d、t、c
启用输入
in
int
i、q、m、l、d
要移位的值
n
word
i、q、m、l、d
值将移位的位数
out
int
i、q、m、l、d
移位指令的结果
eno
bool
i、q、m、l、d
启用输出
描述
在启用输入(en)端的信号状态为 1 时会激活整数右移指令。此指令将输入端 in 的 0 到 15 位逐位右移。输入 n 指定值将移位的位数。如果 n 大于 16,则该命令将 n 视为 16 进行处理。左侧的空位将用第
位的信号状态(整数的符号)填补。正数填补 0,负数则填补 1。移位操作的结果可在 out输出端扫描。
如果 n 不等于 0,则此指令触发的操作总是将状态字的 cc0 和 ov 位复位为 0。
eno 与 en 具有相同的信号状态。
状态字
状态字
实例
shr_i框由i0.0位置上的逻辑1激活。装载mw0并将其右移由mw2指定的位数。结果将被写入mw4。置位q4.0。
3.shr_di 向右移位双精度整数
符号
参数
数据类型
存储器区
描述
en
bool
i、q、m、l、d
启用输入
eno
bool
i、q、m、l、d
启用输出
in
dint
i、q、m、l、d
要移位的值
n
word
i、q、m、l、d
要移动的位数
out
dint
i、q、m、l、d
移位指令的结果
描述
shr_di (右移长整数)指令通过使能(en)输入位置上的逻辑1来激活。shr_di 指令用于将输入 in 的0 至 31 位逐位向右移动。输入 n 用于指定移位的位数。如果 n 大于 32,命令将按照 n 等于 32 的情况执行。自左移入的、用于填补空出位的位位置将被赋予位 31 的逻辑状态(整数的符号位)。这意味着, 当该整数为正时,这些位将被赋值0,而当该整数为负时,则被赋值为1。可在输出 out 位置扫描移位指令的结果。如果 n 不等于 0,则 shr_di 会将 cc 0 位和 ov 位设为0。
eno 与 en 具有相同的信号状态。
状态字
实例
shr_di 框由 i0.0 位置上的逻辑1激活。装载 md0 并将其右移由 mw4 指定的位数。结果将被写入md10。置位 q4.0。
4.shl_w 字左移
符号
参数
数据类型
存储器区
描述
en
bool
i、q、m、l、d
启用输入
eno
bool
i、q、m、l、d
启用输出
in
word
i、q、m、l、d
要移位的值
n
word
i、q、m、l、d
要移动的位数
out
word
i、q、m、l、d
移位指令的结果
描述
shl_w (字左移)指令通过使能(en)输入位置上的逻辑1来激活。shl_w 指令用于将输入 in 的 0 至15 位逐位向左移动。16 到 31 位不受影响。输入 n 用于指定移位的位数。若 n 大于 16,此命令会在输出 out 位置上写入0,并将状态字中的 cc 0 位和 ov 位设置为0。将自右移入 n 个零,用以补上空出的位位置。可在输出 out 位置扫描移位指令的结果。如果 n 不等于 0,则 shl_w 会将 cc 0 位和 ov 位设为0。
eno 与 en 具有相同的信号状态。
状态字
实例
shl_w 框由 i0.0 位置上的逻辑1激活。装载 mw0 并将其左移由 mw2 指定的位数。结果将被写入mw4。置位 q4.0。
5.shr_w 字右移
符号
参数
数据类型
存储器区
描述
en
bool
i、q、m、l、d
启用输入
eno
bool
i、q、m、l、d
启用输出
in
word
i、q、m、l、d
要移位的值
n
word
i、q、m、l、d
要移动的位数
out
word
i、q、m、l、d
字移位指令的结果
描述
shr_w (字右移)指令通过使能(en)输入位置上的逻辑1来激活。shr_w 指令用于将输入 in 的 0 至15 位逐位向右移动。16 到 31 位不受影响。输入 n 用于指定移位的位数。若 n 大于 16,此命令会在输出 out 位置上写入0,并将状态字中的 cc 0 位和 ov 位设置为0。将自左移入 n 个零,用以补上空出的位位置。可在输出 out 位置扫描移位指令的结果。如果 n 不等于 0,则 shr_w 会将 cc 0 位和 ov 位设为0。
eno 与 en 具有相同的信号状态。
状态字
实例
shr_w 框由 i0.0 位置上的逻辑1激活。装载 mw0 并将其右移由 mw2 指定的位数。结果将被写入mw4。置位 q4.0。
6.shl_dw双字左移
符号
参数
数据类型
存储器区
描述
en
bool
i、q、m、l、d
启用输入
eno
bool
i、q、m、l、d
启用输出
in
dword
i、q、m、l、d
要移位的值
n
word
i、q、m、l、d
要移动的位数
out
dword
i、q、m、l、d
双字移位指令的结果
描述
shl_dw (双字左移)指令通过使能(en)输入位置上的逻辑1来激活。shl_dw 指令用于将输入 in 的0 至 31 位逐位向左移动。输入 n 用于指定移位的位数。若 n 大于 32,此命令会在输出 out 位置上写入0并将状态字中的 cc 0 位和 ov 位设置为0。将自右移入 n 个零,用以补上空出的位位置。可在输出 out 位置扫描双字移位指令的结果。如果 n 不等于 0,则 shl_dw 会将 cc 0 位和 ov 位设为0。
eno 与 en 具有相同的信号状态。
状态字
实例
shl_dw 框由 i0.0 位置上的逻辑1激活。装载 md0 并将其左移由 mw4 指定的位数。结果将被写入md10。置位 q4.0。
shr_dw双字右移
符号
参数
数据类型
存储器区
描述
en
bool
i、q、m、l、d
启用输入
eno
bool
i、q、m、l、d
启用输出
in
dword
i、q、m、l、d
要移位的值
n
word
i、q、m、l、d
要移动的位数
out
dword
i、q、m、l、d
双字移位指令的结果
描述
shr_dw (双字右移)指令通过使能(en)输入位置上的逻辑1来激活。shr_dw 指令用于将输入 in 的 0 至 31 位逐位向右移动。输入 n 用于指定移位的位数。若 n 大于 32,此命令会在输出 out 位置上写入0并将状态字中的 cc 0 位和 ov 位设置为0。将自左移入 n 个零,用以补上空出的位位置。
可在输出 out 位置扫描双字移位指令的结果。如果 n 不等于 0,则 shr_dw 会将 cc 0 位和 ov 位设为0。
eno 与 en 具有相同的信号状态。
实例
shr_dw 框由 i0.0 位置上的逻辑1激活。装载 md0 并将其右移由 mw4 指定的位数。结果将被写入md10。置位 q4.0。
功能块图(fbd)移位指令
1.移位指令概述
描述
可使用移位指令向左或向右逐位移动输入in的内容(另请参阅 cpu寄存器)。向左移动n位相当于将输入端in的内容乘以2的n次幂(2 n);向右移动n位则相当于将输入端in的内容除以2的n次幂(2 n)。例如,如果将等价于十进制值3的二进制数左移3位,将得到等价于十进制值24的二进制数。如果将等价于十进制值16的二进制数右移2位,则会得到等价于十进制值4的二进制数。
您提供给输入参数n的数值决定了移动相应值的位数。移位指令产生的空位将用零或符号位的信号状态(0表示正,1表示负)来填补。后移动的位的信号状态将装入状态字的cc1位中(请参见cpu寄存器)。状态字的cc0和ov位将复位为0。您可以使用跳转指令判断cc1位。
下列移位指令可用:
• shr_i:整数右移
• shr_di:长整数右移
• shl_w:字左移
• shr_w:字右移
• shl_dw:双字左移
• shr_dw:双字右移
2 shr_i:整数右移
符号
参数
数据类型
存储器区
描述
en
bool
i、q、m、l、d、t、c
启用输入
in
int
i、q、m、l、d
要移位的值
n
word
i、q、m、l、d
值将移位的位数
out
int
i、q、m、l、d
移位指令的结果
eno
bool
i、q、m、l、d
启用输出
描述
在启用输入(en)端的信号状态为 1 时会激活整数右移指令。此指令将输入端 in 的 0 到 15 位逐位右移。输入 n 指定值将移位的位数。如果 n 大于 16,则该命令将 n 视为 16 进行处理。左侧的空位将用第
位的信号状态(整数的符号)填补。正数填补 0,负数则填补 1。移位操作的结果可在 out输出端扫描。如果 n 不等于 0,则此指令触发的操作总是将状态字的 cc0 和 ov 位复位为 0。
eno 与 en 具有相同的信号状态。
状态字
实例
在 i0.0 的信号状态为 1 时会激活该指令。存储器字 mw0 将按在存储器字 mw2 中指定的位数右移。结果将存入存储器字 mw4 中。输出 q4.0 置 1。
3 shr_di:长整数右移
符号
参数
数据类型
存储器区
描述
en
bool
i、q、m、l、d、t、c
启用输入
in
dint
i、q、m、l、d
要移位的值
n
word
i、q、m、l、d
值将移位的位数
out
dint
i、q、m、l、d
移位指令的结果
eno
bool
i、q、m、l、d
启用输出
描述
在启用输入(en)端的信号状态为 1 时会激活整数右移指令。此指令将输入端 in 的全部内容逐位右移。输入 n 指定值将移位的位数。如果 n 大于 32,则该命令将 n 视为 32 进行处理。左侧的位将用第 31 位的信号状态(双精度整数的符号)填补。正数填补 0,负数则填补 1。移位操作的结果可在 out 输出端扫描。
如果 n 不等于 0,则此指令触发的操作总是将状态字的 cc0 和 ov 位复位为 0。
eno 与 en 具有相同的信号状态。
状态字
实例
在 i0.0 的信号状态为 1 时会激活该指令。存储器双字 md0 将按在存储器字 mw4 中指定的位数右移。结果将存入存储器双字 md10 中。输出 q4.0 置 1。
4.shl_w:字左移
符号
参数
数据类型
存储器区
描述
en
bool
i、q、m、l、d、t、c
启用输入
in
word
i、q、m、l、d
要移位的值
n
word
i、q、m、l、d
值将移位的位数
out
word
i、q、m、l、d
移位指令的结果
eno
bool
i、q、m、l、d
启用输出
描述
在启用输入(en)的信号状态为 1 时会激活字左移指令。此指令将输入端 in 的 0 到 15 位逐位左移。
输入 n 指定要使值移位的位数。如果 n 大于 16,则此命令在 out 输出端写入 0 并将状态字的 cc0和 ov 位置 0。将右侧的各位补零。移位操作的结果可在 out 输出端扫描。
如果 n 的值不等于 0,则此指令触发的操作总是将状态字的 cc0 和 ov 位复位为 0。
eno 与 en 具有相同的信号状态。
状态字
实例
在 i0.0 的信号状态为 1 时会激活该指令。
存储器字 mw0 将按在存储器字 mw2 中指定的位数左移。结果将存入存储器字 mw4 中。输出 q4.0 置 1。
5.shr_w:字右移
符号
参数
数据类型
存储器区
描述
en
bool
i、q、m、l、d、t、c
启用输入
in
word
i、q、m、l、d
要移位的值
n
word
i、q、m、l、d
值将移位的位数
out
word
i、q、m、l、d
移位指令的结果
eno
bool
i、q、m、l、d
启用输出
描述
在启用输入(en)端的信号状态为 1 时会激活字右移指令。此指令将输入端 in 的 0 到 15 位逐位右移。
到 31位不受影响。输入 n 指定值将移位的位数。如果 n 大于 16,则此命令在 out 输出端写入 0并将状态字的 cc0 和 ov 位置 0。将左侧移空的位补零。移位操作的结果可在 out 输出端扫描。如果 n 不等于 0,则此指令触发的操作总是将状态字的 cc0 和 ov 位复位为 0。
eno 与 en 具有相同的信号状态。
状态字
在 i0.0 的信号状态为 1 时会激活该指令。存储器字 mw0 将按在存储器字 mw2 中指定的位数右移。结果将存入存储器字 mw4 中。输出 q4.0 置 1。
6.shl_dw:双字左移
符号
参数
数据类型
存储器区
描述
en
bool
i、q、m、l、d、t、c
启用输入
in
dword
i、q、m、l、d
要移位的值
n
word
i、q、m、l、d
值将移位的位数
out
dword
i、q、m、l、d
移位指令的结果
eno
bool
i、q、m、l、d
启用输出
描述
在启用输入(en)端的信号状态为 1 时会激活双字左移指令。此指令将输入端 in 的 0 到 31 位逐位左移。输入 n 指定值将移位的位数。如果 n 大于 32,则此命令在 out 输出端写入 0 并将状态字的 cc0 和
ov 位置 0。将右侧移空的各位补零。移位操作的结果可在 out 输出端扫描。
如果 n 的值不等于 0,则此指令触发的操作总是将状态字的 cc0 和 ov 位复位为 0。
eno 与 en 具有相同的信号状态。
状态字
实例
在 i0.0 的信号状态为 1 时会激活该指令。
存储器双字 md0 将按在存储器字 mw4 中指定的位数左移。结果将存入存储器双字 md10 中。输出 q4.0 置 1。
7.shr_dw:双字右移
符号
参数
数据类型
存储器区
描述
en
bool
i、q、m、l、d、t、c
启用输入
in
dword
i、q、m、l、d
要移位的值
n
word
i、q、m、l、d
值将移位的位数
out
dword
i、q、m、l、d
移位指令的结果
eno
bool
i、q、m、l、d
启用输出
描述
在启用输入(en)端的信号状态为 1 时会激活双字右移指令。此指令将输入端 in 的 0 到 31 位逐位右移。输入 n 指定值将移位的位数。如果 n 大于 32,则此命令在 out 输出端写入 0 并将状态字的 cc0 和
ov 位置 0。将左侧移空的位补零。移位操作的结果可在 out 输出端扫描。
如果 n 不等于 0,则此指令触发的操作总是将状态字的 cc0 和 ov 位复位为 0。
eno 与 en 具有相同的信号状态。
状态字
实例
在i0.0的信号状态为1时会激活该指令。存储器双字md0将按在存储器字mw4中指定的位数右移。 结果将存入md10中。输出q4.0置1。
编程的语句表(stl)移位指令
1.移位指令概述
描述
可使用移位指令逐位左移或右移累加器 1 中低字的内容或整个累加器的内容(参见 cpu 寄存器)。左移n 位相当于将累加器的内容乘以2 n ;右移 n 位相当于将累加器的内容除以2 n 。例如,将以二进制
格式表示的十进制数 3 左移 3 位时,在累加器中出现相当于十进制数 24 的二进制编码。将以二进制
格式表示的十进制数 16 右移 2 位时,在累加器中出现相当于十进制数 4 的二进制编码。
移位指令后的数字或在累加器 2 的低字低字节中的数值表示要移位的数目。由零或符号位的信号状态
(0 代表正数、1 代表负数)填充移位指令空出的位。将后一个移出的位装载到状态字的 cc 1 位中。
复位状态字的 cc 0 和 ov 位为 0。可使用跳转指令来判断 cc 1 位。移位运算是无条件的,即,它们
的执行不需要任何特殊的条件,且不影响逻辑运算的结果。
下列移位指令可用:
• ssi 带符号整型移位(16 位)
• ssd 带符号长整型移位(32 位)
• slw 左移字(16 位)
• srw 右移字(16 位)
• sld 左移双字(32 位)
• srd 右移双字(32 位)
2 ssi 带符号整型移位(16 位)
格式
ssi
ssi <数目>
2.ssi 带符号整型移位(16 位)
地址
数据类型
描述
<数字>
整型、无符号
要移位的位数目,范围为 0 - 15
描述
ssi (右移带符号整型)只逐位向右移动 accu 1-l 的内容。由符号位(位 15)的信号状态填充移位指令空出的位。将后一个移出的位装载到状态字的 cc 1 位中。地址<数目>或 accu 2-l-l 中的数值指定要移位的位数目。
ssi <数目>:地址<数目>指定移位数目。允许的数值范围为 0 - 15。当<数目>大于 0 时,复位状态字的位 cc 0 和 ov 为 0。当<数目>等于 0 时,则将此移位指令视为 nop 操作。
ssi:移位数目由 accu 2-l-l 中的数值指定。可能的数值范围为 0 - 255。移位数目大于 16 时,始终产生相同的结果(accu 1 = 16#0000、cc 1 = 0 或 accu 1 = 16#ffff、cc 1 = 1)。当移位数目大于 0 时,复位状态字的位 cc 0 和 ov 为 0。当移位数目为 0 时,则将移位指令视为 nop 操作。
状态字
实例
实例 1
实例 2
3.ssd 带符号长整型移位(32 位)
格式
ssd
ssd <数目>
地址
数据类型
描述
<数字>
整型、无符号
要移位的位数目,范围为 0 - 32
描述
ssd(右移带符号的长整型)逐位向右移动 accu 1 的整个内容。由符号位的信号状态填充移位指令空出的位。将后一个移出的位装载到状态字的 cc 1 位中。地址<数目>或 accu 2-l-l 中的数值指定要移位的位数目。
ssd <数目>:地址<数目>指定移位数目。允许的数值范围为 0 32。当<数目>大于 0 时,将状态字的位 cc 0 和 ov 复位为 0。当<数目>等于 0 时,则将此移位指令视为 nop 操作。
ssd:移位数目由 accu 2-l-l 中的数值指定。可能的数值范围为 0 - 255。移位数目大于 32 时,始终产生相同的结果(accu 1 = 32#00000000、cc 1 = 0 或 accu 1 = 32#ffffffff、cc 1 = 1)。当
移位数目大于 0 时,复位状态字的位 cc 0 和 ov 为 0。当移位数目为 0 时,则将移位指令视为 nop
操作。
状态字
4 slw 左移字(16 位)
格式
slw
slw <数目>
地址
数据类型
描述
<数字>
整型、无符号
要移位的位数目,范围为 0 - 15
描述
slw(左移字)只逐位向左移动 accu 1-l 的内容。由零填充移位指令空出的位。将后一个移出的位装载到状态字的 cc 1 位中。地址<数目>或 accu 2-l-l 中的数值指定要移位的位数目。
slw <数目>:地址<数目>指定移位数目。允许的数值范围为 0 - 15。当<数目>大于 0 时,将状态字的位 cc 和 ov 复位为 0。当<数目>等于 0 时,则将此移位指令视为 nop 操作。
slw:移位数目由 accu 2-l-l 中的数值指定。可能的数值范围为 0 - 255。移位数目大于 16 时,始终产生相同的结果:accu 1-l = 0、cc 1 = 0、cc 0 = 0 和 ov = 0。当 0 < 移位数目 <= 16 时,复位状态字的位 cc 0 和 ov 为 0。当移位数目为 0 时,则将移位指令视为 nop 操作。
状态字
5 srw 右移字(16 位)
格式
srw
srw <数目>
地址
数据类型
描述
<数字>
整型、无符号
要移位的位数目,范围为 0 - 15
描述
srw(右移字)只逐位向右移动 accu 1-l 的内容。由零填充移位指令空出的位。将后一个移出的位装载到状态字的 cc 1 位中。地址<数目>或 accu 2-l-l 中的数值指定要移位的位数目。
srw <数目>:地址<数目>指定移位数目。允许的数值范围为 0 - 15。当<数目>大于 0 时,将状态字的位 cc 0 和 ov 复位为 0。当<数目>等于 0 时,则将此移位指令视为 nop 操作。
srw:移位数目由 accu 2-l-l 中的数值指定。可能的数值范围为 0 - 255。移位数目大于 16 时,始终产生相同的结果:accu 1-l = 0、cc 1 = 0、cc 0 = 0 和 ov = 0。当 0 < 移位数目 <= 16 时,复位状态字的位 cc 0 和 ov 为 0。当移位数目为 0 时,则将移位指令视为 nop 操作。
6 sld 左移双字(32 位)
格式
sld
sld <数目>
地址
数据类型
描述
<数字>
整型、无符号
要移位的位数目,范围为 0 - 32
描述
sld(左移双字)逐位向左移动 accu 1 的整个内容。由零填充移位指令空出的位。将后一个移出的位装载到状态字的 cc 1 位中。地址<数目>或 accu 2-l-l 中的数值指定要移位的位数目。
sld <数目>:地址<数目>指定移位数目。允许的数值范围为 0 - 32。当<数目>大于 0 时,将状态字的位 cc 和 ov 复位为 0。当<数目>等于 0 时,则将此移位指令视为 nop 操作。
sld:移位数目由 accu 2-l-l 中的数值指定。可能的数值范围为 0 - 255。移位数目大于 32 时,始终产生相同的结果:accu 1 = 0、cc 1 = 0、cc 0 = 0 和 ov = 0。当 0 < 移位数目 <= 32 时,复位状态字的位 cc 0 和 ov 为 0。当移位数目为 0 时,则将移位指令视为 nop 操作。
7 srd 右移双字(32 位)
格式
srd
srd <数目>
地址
数据类型
描述
<数字>
整型、无符号
要移位的位数目,范围为 0 - 32
描述
srd(右移双字)逐位向右移动 accu 1 的整个内容。由零填充移位指令空出的位。将后一个移出的位装载到状态字的 cc 1 位中。地址<数目>或 accu 2-l-l 中的数值指定要移位的位数目。
srd <数目>:地址<数目>指定移位数目。允许的数值范围为 0 - 32。当<数目>大于 0 时,将状态字的位 cc 0 和 ov 复位为 0。当<数目>等于 0 时,则将此移位指令视为 nop 操作。
srd:移位数目由 accu 2-l-l 中的数值指定。可能的数值范围为 0 - 255。移位数目大于 32 时,始终产生相同的结果:accu 1 = 0、cc 1 = 0、cc 0 = 0 和 ov = 0。当 0 < 移位数目 <= 32 时,复位状态字的位 cc 0 和 ov 为 0。当移位数目为 0 时,则将移位指令视为 nop 操作。