比较指令(CMP)的应用举例
- 格式:doc
- 大小:161.00 KB
- 文档页数:2
比较指令CMP与区域比较指令ZCP---三菱FX系列PLC应用指令比较指令与区域比较指令有16位指令与32位指令的区分,本节再介绍一下FX系列PLC32位寄存器的地址分配。
比较指令:CMP:16位连续型比较指令CMPP:16位脉冲型比较指令DCMP:32位连续型比较指令DCMPP:32位脉冲型比较指令举例:LD X000CMP K100 D100 M0当X0闭合时:如果寄存器D100的值小于100时,则M0闭合如果寄存器D100的值等于100时,则M1闭合如果寄存器D100的值大于100时,则M2闭合1、比较指令可以控制例中M0,M1,M2三个位元件的状态。
2、当X0断开时,M0,M1,M2仍保持在X0闭合时的运算结果,如果想清除CMP 比较指令的运算结果则需要用复位指令。
区域比较指令:ZCP:16位连续型区域比较指令ZCPP:16位脉冲型区域比较指令DZCP:32位连续型区域比较指令DZCPP:32位脉冲型区域比较指令举例:LD X000ZCP K100 K200 D100 M10当X0闭合时:如果寄存器D100的值小于100时,则M10闭合如果寄存器D100的值大于100,小于200时,则M11闭合如果寄存器D100的值大于200时,则M12闭合1、区域比较指令可以控制例中M10,M11,M12三个位元件的状态。
2、当X0断开时,M10,M11,M12仍保持在X0闭合时的运算结果,如果想清除ZCP 区域比较指令的运算结果则需要用复位指令。
FX系列PLC32位寄存器的地址分配:32位寄存器是占用两个16位寄存器地址,比如说:D0用到32位指令里,则D0,D1这两个寄存器被占用。
D0为数据低位,D1为数据高位。
如果23位寄存器D0的值为16,则D1的值为0,D0的值为16如果23位寄存器D0的值为70000,则D1的值为1,D0的值为4464。
(4464的十六进制值为1170,1十六进制值仍为1。
比较指令cmp前言比较指令(cmp)是计算机中一种用于比较两个数据(通常是数据对象或文件)之间的指令。
通过比较指令,我们可以判断两个数据是否相等或者大小关系。
在实际应用中,比较指令被广泛应用于程序的流程控制、排序算法、查找算法等方面。
本文将对比较指令cmp的使用方法进行全面、详细、完整且深入地探讨。
使用方法比较指令cmp的基本语法比较指令cmp的基本语法如下:cmp [选项] 文件1 文件2其中,文件1和文件2是需要比较的两个文件的路径。
比较指令cmp的常用选项常用的比较指令cmp选项如下: - -b 或–bytes:以字节为单位进行比较(默认情况下以行为单位进行比较)。
- -i 或–ignore-initial:忽略共同长度的初始部分。
- -l 或–verbose:显示不同的同时还显示字节的编号。
- -s 或–quiet 或–silent:不显示不同之处。
- -z 或–zero-terminated:以空字节作为结束符,而不是换行符。
比较指令cmp的返回值比较指令cmp根据比较结果的不同返回不同的值: - 若两个文件相同,cmp返回0。
- 若两个文件不同,cmp返回1。
- 若比较出错,cmp返回2。
比较指令cmp的应用场景程序的流程控制在程序的流程控制中,我们经常需要判断两个数据是否相等或者大小关系。
比较指令cmp可以帮助我们实现这些判断。
通过结合条件语句,我们可以根据cmp的返回值来执行不同的代码块,实现程序的各种流程控制逻辑。
排序算法排序算法是计算机领域中非常重要的基础算法之一。
在排序算法中,我们需要比较数据的大小关系来进行排序。
比较指令cmp可以帮助我们快速比较两个数据的大小关系,从而实现各种排序算法,如冒泡排序、快速排序、归并排序等。
查找算法查找算法是计算机领域中解决查找问题的算法。
在查找算法中,我们需要比较数据是否相等来确定是否找到目标数据。
比较指令cmp可以帮助我们进行数据的比较,从而实现各种查找算法,如二分查找、哈希查找、线性查找等。
触点比较指令应用实例触点比较指令应用实例一、触点比较指令(CMP)1、CMP的功能CMP指令的功能是比较目的操作数与源操作数的大小,它会把比较的结果存入标志寄存器中,因此仅需要查看标志寄存器的值就能够得到比较结果。
它有以下功能:(1)CMP指令可以用来比较两个数的大小,如果两个操作数相等,比较结果为零;(2)CMP指令可以比较两个数的符号,如果源操作数的符号比目的操作数大,比较结果为正;(3)CMP指令可以检测两个操作数的值是否越界,如果越界,比较结果为负;(4)CMP指令可以检测两个操作数的位数是否相等,如果不等,比较结果为负。
2、CMP指令的应用实例(1)比较寄存器和立即数的大小:CMP DX,#0x0004此指令比较的是DX寄存器与立即数0x0004,DX寄存器的值大于0x0004时,CF=0,ZF=0,SF=0;DX寄存器的值小于0x0004时,CF=1,ZF=0,SF=1;DX寄存器的值等于0x0004时,CF=0,ZF=1,SF=0。
(2)比较内存单元和寄存器的大小:CMP AX,[DI]此指令比较的是AX寄存器和DI指针指向的内存单元的大小,当AX值大于内存单元的值时,CF=0,ZF=0,SF=0;当AX值小于内存单元的值时,CF=1,ZF=0,SF=1;当AX值等于内存单元的值时,CF=0,ZF=1,SF=0。
(3)比较两个内存单元的大小:CMP [SI],[DI]此指令比较的是SI指针指向的内存单元和DI指针指向的内存单元的大小,当SI指针指向的内存单元的值大于DI指针指向的内存单元的值时,CF=0,ZF=0,SF=0;当SI指针指向的内存单元的值小于DI指针指向的内存单元的值时,CF=1,ZF=0,SF=1;当SI指针指向的内存单元的值等于DI指针指向的内存单元的值时,CF=0,ZF=1,SF=0。
二、跳转指令(JMP)1、JMP指令用来改变程序流程,它可以用来实现程序的条件转移,无条件转移,循环等操作。
案例3-1 数码管循环显示数字
1.案例原理与提示
(1) 数码管的ABCDEFG七段对应Y0~Y6,计数器循环计数。
(2) 用数据寄存器存放变化的数字,用INC(加1)指令使数字不断递增,用CMP(比较)指令实现数据的循环。
(3) 也可以用功能指令直接七段译码。
2. 案例实施过程
1) I/O分配
数码显示控制输入/输出端口分配表如下表所示。
数码显示控制输入/输出端口分配表
2) 控制程序编写
数码显示控制程序梯形图如下图所示。
数码显示控制程序梯形图
用数据寄存器D0存放变化的数字0~9。
由特殊功能继电器M8013产生秒脉冲,采用加1指令使D0中的数据不断递增,每过一秒加1。
当D0中的数据递增为10时,D0中再次
赋值为0。
程序中M8002对程序初始化,把K0(十制数0)放入数据寄存器D0中。
当比较指令(CMP)的比较结果为等于时(D0=10),M11=1,则D0中赋值0。
当SB12断开时,D0=0,[INCP D0]指令不工作,数码管上显示0。
3) 接线与调试
数码显示控制外部接线图如下图所示。
数码显示控制外部接线图
3. 思考与提升
(1) 当SB12开关闭合时,数码管就循环显示0~A,每个数字显示0.5s;当SB12开关断开时,数码管上显示“H”。
(2) 当SB12开关闭合时,数码管就循环显示9~0,每个数字显示0.8s。
罗克韦尔cmp指令罗克韦尔CMP(Compare)指令是一条用于比较两个操作数的指令,常用于在编程中进行条件判断和跳转操作。
语法:CMP destination, source功能:将两个操作数进行减法运算,并根据结果设置相应的标志位。
操作数:- destination:比较的目标操作数,通常是寄存器或内存中的值。
- source:比较的源操作数,通常是寄存器、立即数或内存中的值。
指令执行过程:1. 将源操作数的值从目标操作数中减去。
2. 根据减法结果设置标志位(Carry Flag、Zero Flag、Sign Flag等)。
常见的标志位设置情况如下:- 如果结果为零,将设置Zero Flag。
- 如果结果为正,将设置Sign Flag为0,Carry Flag为0。
- 如果结果为负,将设置Sign Flag为1,Carry Flag为1。
示例代码:assemblyMOV AX, 5 ; 将5赋值给AX寄存器CMP AX, 10 ; 比较AX寄存器的值和10JE equal ; 如果相等则跳转到equal标签处JG greater ; 如果大于则跳转到greater标签处JL less ; 如果小于则跳转到less标签处equal: ; 相等的情况下执行的代码...JMP done ; 跳转到done标签处greater: ; 大于的情况下执行的代码...JMP done ; 跳转到done标签处less: ; 小于的情况下执行的代码...JMP done ; 跳转到done标签处done: ; 执行完毕后的代码...上述代码中,首先将AX寄存器的值设置为5,然后使用CMP指令将AX寄存器的值与10进行比较。
根据比较结果,可通过跳转指令(JE、JG、JL)来执行不同的代码块。
字节比较指令字节比较指令是计算机中常用的一种指令,用于比较两个字节的大小关系。
在计算机中,数据以字节为单位进行存储和操作,而字节比较指令则可以帮助程序员判断两个字节的值的大小关系,从而进行相应的逻辑处理。
在计算机中,字节是最小的可寻址单元,一般由8个二进制位组成,可以表示0~255之间的整数。
字节比较指令可以直接比较两个字节的值,判断它们的大小关系。
常见的字节比较指令有以下几种:1. CMP指令:CMP指令用于比较两个操作数的值,并根据比较结果设置标志位。
比较的结果可以通过标志位来判断,例如ZF(零标志位)表示两个操作数相等,CF(进位标志位)表示第一个操作数小于第二个操作数,SF(符号标志位)表示第一个操作数小于第二个操作数。
2. TEST指令:TEST指令用于按位与操作,可以将两个操作数的对应位进行与操作,并根据结果设置标志位。
通过比较两个字节的结果,可以判断它们的大小关系。
3. SUB指令:SUB指令用于进行减法运算,可以比较两个操作数的差值,并根据结果设置标志位。
通过比较两个字节的差值,可以判断它们的大小关系。
通过这些字节比较指令,程序员可以方便地比较两个字节的大小关系,并根据比较结果进行相应的逻辑操作。
例如,在排序算法中,可以使用字节比较指令来比较数组中的元素,从而实现对数组的排序。
字节比较指令在计算机中的应用非常广泛。
它不仅可以用于比较字节的大小关系,还可以用于比较其他数据类型的大小关系。
例如,可以使用字节比较指令来比较整数、浮点数等不同类型的数据。
在使用字节比较指令时,需要注意以下几点:1. 数据类型的选择:不同的数据类型需要使用不同的字节比较指令。
例如,对于无符号整数,应该使用无符号字节比较指令;对于有符号整数,应该使用有符号字节比较指令。
2. 比较结果的判断:根据比较结果设置的标志位,可以判断两个字节的大小关系。
程序员需要根据具体的需求来选择判断条件,以实现正确的逻辑操作。
3. 内存地址的访问:在比较字节时,需要注意访问内存地址的正确性。
三菱PLC传送与比较指令的用法1、比较指令CMPCMP指令有三个操作数:两个源操作数[S1.]和[S2.],一个目标操作数[D.],该指令将[S1.]和[S2.]进行比较,结果送到[D.]中。
CMP指令使用说明如图所示。
2、区间比较指令ZCPZCP指令是将一个操作数[S.]与两个操作数[S1.]和[S2.]形成的区间比较,且[S1.]不得大于[S2.],结果送到[D.]中。
ZCP指令使用说明如图所示。
3、传送指令MOVMOV指令将源操作数的数据传送到目标元件中,即[S.]→[D.]。
MOV指令的使用说明如图所示。
当X0为ON时,源操作数[S.]中的数据K100传送到目标元件D10中。
当X0为OFF,指令不执行,数据保持不变。
4、移位传送指令SMOV首先将二进制的源数据(D1)转换成BCD码,然后将BCD码移位传送,实现数据的分配、组合。
源数据BCD码右起从第4位(m1=4)开始的2位(m2=2)移送到目标D2/的第3位(n=3)和第2位,而D2/的第4和第1两位BCD码不变。
然后,目标D2/中的BCD码自动转换成二进制数,即为D2的内容。
BCD码值超过9999时出错。
5、取反传送指令CMLCML指令使用说明如图所示。
将源操作数中的数据(自动转换成二进制数)逐位取反后传送。
6、块传送指令BMOVBMOV指令是从源操作数指定的元件开始的n个数组成的数据块传送到指定的目标。
如果元件号超出允许的元件号范围,数据仅传送到允许的范围内。
BMOV指令的使用说明如图所示。
7、多点传送指令FMOVFMOV指令是将源元件中的数据传送到指定目标开始的n个目标元件中,这n个元件中的数据完全相同。
FMOV指令使用说明如图所示。
8、数据交换指令XCHXCH指令是将两个目标元件D1和D2的内容相互交换。
使用说明如图所示。
9、BCD变换、BIN变换指令BCD是将源元件中的二进制数转换为BCD码送到目标元件中。
对于l 6位或32位二进制操作数,若变换结果超出0-9999或0-99999999的范围就会出错。
一、比较指令功能及用法
1、CMP指令
(1)适用软元件
(2)功能与动作
二、比较指令应用实例
例1、单按钮启停控制
控制程序:
例2、生产流水线小车运动
控制要求:
某生产线要求小车执行以下控制:初始状态下,小车停在行程开关ST1 的位置,
且行程开关ST1被压合。
第一次按下按钮SB1后,小车前进至行程开关ST2处停止,5S后退回行程开关ST1处停止。
第二次按下SB1后,小车前进到行程开关ST3处停止,5S后退回到行程开关ST1处停止。
第三次按下SB1后,小车前进到行程开关ST4处停止,5S后退回至行程开关ST1处停止。
再按下按钮SB1,重复以上过程。
生产流水线小车运动示意图如图所示。
后退
ST5控制程序:。