欢迎访问文稿网!

移位和循环移位指令

范文之家 分享 时间: 加入收藏 我要投稿 点赞

移位和循环移位指令

    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。

221381
领取福利

微信扫码领取福利

微信扫码分享