首页 百科知识 移位和循环移位指令

移位和循环移位指令

时间:2022-10-26 百科知识 版权反馈
【摘要】:如果移位结果为0,零标志位SM1.0置1。循环移位将移位数据存储单元的首尾相连,同时又与溢出标志SM1.1连接,SM1.1用来存放被移出的位。当移位的次数是零时,零标志位SM1.0为1。移位寄存器指令常用于顺序控制的梯形图程序设计,与使用SCR指令的编程方法相比,其梯形图程序更简洁。SHRB指令移出的位被放入溢出标志位SM1.1。

6.3 传送、移位和循环移位指令

6.3.1 字节、字、双字和实数的传送指令

数据传送指令MOV,用来传送单个的字节、字、双字、实数。它将输入的数据(IN)传送到输出(OUT),传送过程不改变源地址中的内容。其指令格式及操作数如表6-4所示。

图6-8所示的为单个数据传送指令的例子。

该程序的作用是将VW10中的内容送到VW100中,而VW10中的内容不变。

表6-4 数据传送指令格式及操作数

img191

img192

图6-8 使用单个数据传送指令的梯形图和语句表

6.3.2 字节、字、双字的块传送指令

数据块传送指令将从输入地址IN开始的N个数据传送到从输出地址OUT开始的N个单元中,N的范围为1至255,N的数据类型为字节。指令格式及功能如表6-5所示。

表6-5 数据块传送指令格式及功能

img193

续表

img194

图6-9所示的为数据块传送指令的例子。

img195

图6-9 使用数据块传送指令的梯形图和语句表

程序执行后,将变量存储器VB20开始的4个字节(VB20~VB23)中的数据,移至VB100开始的4个字节中(VB100~VB103)。比如,将VB20~VB23中的数据30、31、32、33送到VB100~VB103中。

img196

6.3.3 字节立即传送指令

字节立即传送指令和位操作指令中的立即指令一样,用于输入和输出的立即处理。

字节立即读取(BIR)指令读取实际输入IN(为字节),并将结果写入OUT,但过程映像寄存器未更新。

字节立即写入(BIW)指令将从输入IN读取的数值写入(以字节为单位)物理输出OUT,同时刷新过程映像寄存器。其指令格式及功能如表6-6所示。

表6-6 字节立即传送指令格式

img197

6.3.4 左移和右移指令

移位指令(shift)有左移和右移两种,移位数据的长度分字节型、字型和双字型三种,其指令格式及操作数如表6-7所示。

1)左移位指令(SHL)

SHL指令的功能是使能输入有效时,将输入IN的无符号数字节、字或双字中的各位向左移N位后(右端补0),将结果输出到OUT所指定的存储单元中。如果移位次数大于0,最后一次移出位保存在“溢出”存储器位SM1.1。如果移位结果为0,零标志位SM1.0置1。

表6-7 字节、字、双字的左移和右移指令格式及操作数

img198

续表

img199

2)右移位指令(SHR)

SHR指令的功能是使能输入有效时,将输入IN的无符号数字节、字或双字中的各位向右移N位后,将结果输出到OUT所指定的存储单元中,移出位补0,最后1位移出位保存在SM1.1。如果移位结果为0,零标志位SM1.0置1。

图6-10所示的为移位指令的例子。

当程序中的使能输入I0.0接通4次,则产生4个扫描周期的高电平,将输入端变量寄存器VB10中无符号字节数1110 0101左移4位后,结果输出到OUT所指定的存储单元VB10中,最后一次移出位0保存在“溢出”存储器位SM1.1中。

6.3.5 循环左移和循环右移指令

循环移位指令(rotate)有循环左移和循环右移两种,移位数据的长度分字节型、字型和双字型三种。循环移位将移位数据存储单元的首尾相连,同时又与溢出标志SM1.1连接,SM1.1用来存放被移出的位。其指令格式及操作数如表6-8所示。

img200

图6-10 移位指令与循环移位指令举例

表6-8 字节、字、双字的循环左、右移位指令格式及操作数

img201

1)循环左移位指令(ROL)

ROL指令的功能是使能输入有效时,将输入IN中的各位循环左移N位后,将结果输出到OUT所指定的存储单元中,移出的最后一位的数值送溢出标志位SM1.1。当移位的次数是零时,零标志位SM1.0为1。

2)循环右移位指令(ROR)

ROR指令的功能是使能输入有效时,将输入IN中的各位循环右移N位后,将结果输出到OUT所指定的存储单元中,移出的最后一位的数值送溢出标志位SM1.1。当移位的数值是零时,零标志位SM1.0为1。

3)移位位数的处理

移位次数N大于允许值(B为8,W为16,D为32)时的移位位数的处理如下。

(1)如果操作数是字节,则当移位次数N≥8时,在执行循环移位前,先对N进行模8操作(N除以8后取余数),其结果0~7为实际移动位数。

(2)如果操作数是字,则当移位次数N≥16时,在执行循环移位前,先对N进行模16操作(N除以16后取余数),其结果0~15为实际移动位数。

(3)如果操作数是双字,则当移位次数N≥32时,在执行循环移位前,先对N进行模32操作(N除以32后取余数),其结果0~31为实际移动位数。

图6-10所示的为循环移位指令的例子。

当程序中的使能输入I0.0接通3次,则产生3个扫描周期的高电平,将输入端变量寄存器VB20中无符号字节数1110 0100循环右移3位后,结果输出到OUT所指定的存储单元VB20中,最后一次移出位1保存在“溢出”存储器位SM1.1中。

6.3.6 移位寄存器指令

移位寄存器(shift register)指令常用于顺序控制的梯形图程序设计,与使用SCR指令的编程方法相比,其梯形图程序更简洁。

如图6-11所示,移位寄存器指令SHRB在梯形图中有3个输入端:

(1)DATA端,它将输入的数值移入移位寄存器中;

(2)S_BIT端,它指定移位寄存器最低位的地址;

img202

图6-11 移位寄存器指令举例

(3)字节变量N,它指定移位寄存器的长度和移位方向。如果N为正,则正向移位;如果N为负,则反向移位。SHRB指令移出的位被放入溢出标志位SM1.1。

当N为正值时,从使能输入的上升沿开始,寄存器中的各位由低位向高位移1位,DATA输入的二进制数从最低位(S_BIT)移入,最高位被移到溢出位SM1.1中。

当N为负值时,反向移动,输入数据从最高位移入,最低位(S_BIT)移出,移出的数据放在溢出标志位(SM1.1)中。

DATA和S_BIT为布尔数据类型,N为字节型,可指定的移位寄存器最大长度为64位。

6.3.7 字节交换指令

字节交换指令(swap bytes)用来交换输入字IN的高位字节和低位字节。指令格式及操作数如表6-9所示。

表6-9 字节交换指令使用格式及功能

img203

图6-12所示的为字节交换指令的例子。

img204

图6-12 字节交换指令举例

如果指令执行之前VW50中字的内容为D6C3,则指令执行之后VW50中的内容为C3D6。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈