传送指令与比较指令
- 格式:doc
- 大小:216.00 KB
- 文档页数:9
汇编语言指令集一、数据传输指令1. 通用数据传送指令.MOV(MOVe) 传送字或字节.MOVS(MOVe String) 串传送指令MOVSX先符号扩展,再传送.MOVZX先零扩展,再传送.PUSH把字压入堆栈.POP把字弹出堆栈.PUSHA把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器里字节的顺序XCHG (eXCHanG)交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )XADD先交换再累加.( 结果在第一个操作数里)XLAT(TRANSLATE) 字节查表转换.── BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL )2. 输入输出端口传送指令.IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器)输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时,其范围是0-65535.3. 目的地址传送指令.LEA (Load Effective Address)装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS (Load DS with pointer)传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES (Load ES with pointer)传送目标指针,把指针内容装入ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF (Load AH with Flags)标志寄存器传送,把标志装入AH.SAHF (Store AH into Flgs)标志寄存器传送,把AH内容装入标志寄存器.PUSHF (PUSH the Flags)标志入栈.POPF (POP the Flags)标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.二、算术运算指令───────────────────────────────────────ADD 加法.ADC 带进位加法.INC 加1.AAA 加法的ASCII码调整.非压缩的BCD码加法十进制调整指令DAA 加法的十进制调整.压缩的BCD码加法十进制调整指令SUB (SUBtract)减法.SBB (SuVtrach with borrow)带借位减法.DEC (DECrement)减1.NEC (NEGate)求反(以0 减之).CMP (CoMPare)比较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.非压缩的BCD码加法十进制调整指令DAS 减法的十进制调整.压缩的BCD码减法十进制调整指令MUL (unsinged MULtiple)无符号乘法.IMUL (sIgned MUL tiple)整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV (unsigned DIVide)无符号除法.IDIV (sIgned DIVide)整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW (Count Byte to Word)字节转换为字. (把AL中字节的符号扩展到AH中去)CWD (Count Word to Doble word)字转换为双字. (把AX中的字的符号扩展到DX中去) CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令───────────────────────────────────────AND 与运算.or 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL (SHift logical Letf)逻辑左移.SAL 算术左移.(=SHL)SHR (SHift logical Right)逻辑右移.SAR 算术右移.(=SHR)ROL (Rotate Left )循环左移.ROR (Rotate Right)循环右移.RCL (Rotate Left through Carry)通过进位的循环左移.RCR (Rotate Right through Carry)通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时, 可直接用操作码. 如SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如MOV CL,04SHL AX,CL四、串指令───────────────────────────────────────DS:SI 源串段寄存器:源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志0表示重复操作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS (CoMPare String)串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS (SCAn String)串扫描指令.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS (STOre into String)保存串.是LODS的逆过程.REP (REPeat)当CX/ECX<>0时重复.REPE/REPZ (REPeat while Equal/Zero)当ZF=1或比较结果相等,且CX/ECX<>0时重复. REPNE/REPNZ (REPeat while Not Equal/Zero)当ZF=0或比较结果不相等,CX/ECX<>0时重复. REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令───────────────────────────────────────1>无条件转移指令(长转移)JMP 无条件转移指令CALL 过程调用RET/RETF过程返回.2>条件转移指令(短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不小于或不等于时转移.JAE/JNB 大于或等于转移.JB/JNAE 小于转移.JBE/JNA 小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC 无进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为"0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为"1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT 中断指令INTO 溢出中断IRET 中断返回5>处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯片引线TEST为高电平时使CPU进入等待状态. ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD (SeT Direction flag)置方向标志位.CLD (CLear Direction flag)清方向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令───────────────────────────────────────DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束.8088 汇编跳转cmp a,b 比较a与bmov a,b 把b的值送给aret 返回主程序nop 无作用,英文“no operation”的简写,意思是“do nothing” call 调用子程序je 或jz 若相等则跳jne或jnz 若不相等则跳jmp 无条件跳jb 若小于则跳ja 若大于则跳jg 若大于则跳jge 若大于等于则跳jl 若小于则跳jle 若小于等于则跳pop 出栈push 压栈MOV功能: 把源操作数送给目的操作数语法: MOV 目的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数POP 操作数格式: PUSH r PUSH M PUSH data POP r POP mPUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址至寄存器语法: LEA r,m LDS r,m LES r,mXLAT(XLATB)功能: 查表指令语法: XLAT XLAT m算数运算指令ADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,Z,S,OSUB,SBB功能:减法指令语法: SUB OP1,OP2 SBB OP1,OP2格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data影响标志: C,P,A,Z,S,OINC,DEC功能: 把OP的值加一或减一语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取二进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,IMUL功能: 乘法指令语法: MUL OP IMUL OP格式: MUL r/m IMUL r/m影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV功能:除法指令语法: DIV OP IDIV OP格式: DIV r/m IDIV r/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,AAS,AAM,AAD功能: 非压BCD码运算调整指令语法: AAA AAS AAM AAD影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)DAA,DAS功能: 压缩BCD码调整指令语法: DAA DAS影响标志: C,P,A,Z,S位运算指令集AND,OR,XOR,NOT,TEST功能: 执行BIT与BIT之间的逻辑运算语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL功能: 移位指令语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL 影响标志: C,P,Z,S,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL 影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定方向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: 比较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执行语法: JMP 地址JXX功能: 当特定条件成立则跳往指定地址执行语法: JXX 地址注:A: ABOVE,当C=0,Z=0时成立B: BELOW,当C=1时成立C: CARRY,当弁时成立CXZ: CX寄存器的值为0(ZERO)时成立E: EQUAL,当Z=1时成立G: GREATER(大于),当Z=0且S=0时成立L: LESS(小于),当S不为零时成立N: NOT(相反条件),需和其它符号配合使用O: OVERFLOW,O=1时成立P: PARITY,P=1时成立PE: PARITY EVEN,P=1时成立PO: PARITY ODD,P=0时成立S: SIGN,S=1时成立Z: ZERO,Z=1时成立LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址LOOPNE(Z) 地址标志位: 无CALL,RET功能: 子程序调用,返回指令语法: CALL 地址RET RET n标志位: 无INT,IRET功能: 中断调用及返回指令语法: INT n IRET标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: 无CMPSB,CMPSW,CMPSD功能: 字符串比较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载入或存贮指令语法: LODSB LODSW STOSB STOSW标志位: 无REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S而定。
PLC传送比较指令的基本用途
MOV、CMP指令,SMOV、CML、BMOV、FMOV、XCH、BCD、BIN 和ZCP指令系统称为传送比较指令,它们是应用指令中使用最频繁的指令。
它们的基本用途有以下几个方面。
(1)用来获得程序的初始工作数据。
一个掌握程序总是需要初始数据。
这些数据可以从输入端口上连接的外部器件获得,然后通过传送指令读取这些器件上的数据并送到.内部单元;初始数据也可以用程序设置,即向内部单元传送马上数;另外,某些运算数据存储在机内的某个地方,等程序开头运行时通过初始化程序传送到工作单元。
(2)用来进行机内数据的存取管理。
在数据运算过程中,机内的数据传送是不行缺少的。
由于数据运算可能要涉及不同的工作单元,数据需在它们之间传送;同时,运算还可能会产生一些中间数据,这些数据也需要传送到适当的地方临时存放;另外,有时机内的数据需要备份保存,这就要找地方把这些数据存储妥当。
总之,对一个涉及数据运算的程序,数据管理是很重要的。
(3)用来运算处理结果并向输出端口传送。
运算处理结果总是要通过输出实现对执行器的掌握。
对于与输出口连接的离散执行器件,可成组处理后看做是整体的数据单元,按各口的目标状态送入相应的数据,以实现对这些器件的掌握。
(4)用来比较指令以建立掌握点。
掌握现场常有将某个物理量的量值或变化区间作为掌握点的状况。
如温度低于某设定值打开电热器,
通过高于或低于某值就报警等。
作为一个掌握“阀门”,比较指令常消失在工业掌握程序中。
汇编常用指令1. 前言汇编语言是一种低级别的计算机语言,它是由一些指令组成的。
指令是一条计算机执行的命令,从基本上讲,这些指令代表着标准的操作,例如加、减、乘、除、移位和比较等。
汇编语言可以通过编写程序来控制一个计算机的行为,这些程序通常被称为汇编程序。
本文将介绍汇编语言中一些常用的指令。
2. 数据传送指令数据传送指令是汇编语言中最基本的指令之一,它主要用来将数据从一个位置传送到另一个位置。
在汇编语言中,数据传送指令通常使用MOV语句来实现。
下面是一些常用的数据传送指令:- MOV AX, BX:将BX中存储的数据传送到AX中。
- MOV AX, [BX]:将BX中存储的地址所指向的数据传送到AX中。
- MOV [BX], AX:将AX中存储的数据传送到BX所指向的地址中。
3. 算术运算指令算术运算指令主要用来执行各种数学运算,例如加法、减法、乘法和除法等操作。
下面是一些常用的算术运算指令:- ADD AX, BX:将BX中存储的数据与AX中存储的数据相加,并将结果存储在AX中。
- SUB AX, BX:将BX中存储的数据从AX中存储的数据中减去,并将结果存储在AX中。
- MUL BX:将AX中存储的数据与BX中存储的数据相乘,并将结果存储在AX中。
- DIV BX:将AX中存储的数据除以BX中存储的数据,并将结果存储在AX和DX中。
4. 位运算指令位运算是一种在二进制数字级别上的运算,它可以执行各种位操作,例如AND、OR、XOR和NOT等操作。
下面是一些常用的位运算指令:- AND AX, BX:将BX中存储的数据与AX中存储的数据按位进行AND运算,并将结果存储在AX中。
- OR AX, BX:将BX中存储的数据与AX中存储的数据按位进行OR 运算,并将结果存储在AX中。
- XOR AX, BX:将BX中存储的数据与AX中存储的数据按位进行XOR运算,并将结果存储在AX中。
- NOT AX:将AX中存储的数据按位进行取反操作。
传送及比较指令总结传送指令是计算机系统中常用的一类指令,用于将数据从一个位置移动到另一个位置。
这些指令通常用于数据的复制、转移和重排等任务。
在本文中,我将总结一些常见的传送指令,并比较它们的异同。
1.MOV指令:MOV (Move) 指令用于将数据从一个位置复制到另一个位置。
它可以在寄存器之间、寄存器和内存之间、寄存器和端口之间进行数据的传送。
MOV 指令通常具有两个操作数,一个目标操作数和一个源操作数。
例如,`MOV AX, BX` 将寄存器 BX 中的值复制到寄存器 AX 中。
MOV 指令在大多数计算机体系结构中都是支持的,因为它是一种非常基本和常见的操作。
2.LDR和STR指令:LDR (Load) 和 STR (Store) 指令用于将数据从内存中加载到寄存器或将数据从寄存器存储到内存中。
这些指令主要在ARM架构中使用。
LDR指令将内存中的数据加载到寄存器中,例如,`LDR R0, [R1]` 将 R1 寄存器中的地址所对应的内存单元中的数据加载到 R0 寄存器中。
STR 指令则将寄存器中的数据存储到内存中,例如,`STR R0, [R1]` 将 R0 寄存器中的数据存储到 R1 寄存器中的地址所对应的内存单元中。
3.PUSH和POP指令:PUSH指令用于将数据压入栈中,而POP指令用于从栈中弹出数据。
这两个指令通常用于实现函数调用和中断处理等操作。
PUSH指令将数据放入栈顶,然后栈指针下移;而POP指令则将栈顶数据读取到寄存器中,并将栈指针上移。
例如,`PUSHAX`将AX寄存器中的数据压入栈中,`POPAX`将栈顶数据弹出到AX寄存器中。
4.XCHG指令:XCHG (Exchange) 指令用于交换两个操作数的值。
这个指令可以用于两个寄存器之间的值交换,或者寄存器和内存之间的交换。
例如,`XCHG AX, BX` 将寄存器 AX 和 BX 中的数据进行交换。
XCHG 指令常用于实现数据交换、排序和互斥访问等场景。
实验四传送与比较指令【实验目的】1.熟悉STEP7编程软件的基本使用方法。
2.掌握STEP7编程软件梯形图程序的运行、监视及调试方法。
3.掌握基本传送与比较指令的使用方法。
4.将所学传送与比较指令知识运用于实践中,培养分析问题、解决问题能力。
【预习要求】1.复习传送与比较指令的有关内容。
2.按照下面给出的实验习题控制要求进行预习,理论分析梯形图内容。
【实验任务及要求】1.为加深对本次实验指令的理解,将课堂上讲解的例题输入编程软件,下载运行,并观察实验结果。
2.将实验习题理论分析的梯形图内容进行验证。
将梯形图程序输入编程软件,下载运行,并根据运行情况进行调试、修改程序,直到通过为止。
3.例题内容要求在实验课上测试通过,实验习题内容要求课堂上进行编写及调试,实验报告需涵盖I/O分配表和梯形图。
4.要求实验报告写出心得体会:本次实验中遇到的问题、解决方案或收获。
【实验步骤】1.新建工程,进行硬件组态,编译保存。
2.将程序逐条输入,检查无误后,保存程序。
3.将工程下载到模拟器。
4.将PLC设为运行状态,根据控制要求观察程序输出状态是否正确。
【实验内容】1、传送指令例1:当输入I0.2为1时,执行传送操作,将MW20的内容传送到DBW20,且使输出Q4.0为1。
~ 1 ~例2:用传送指令,设计一个梯形图将存储区MB0-MB3的数据清除。
MB0-MB3实际上就是MD0,因此用一条传送指令即可。
2、比较指令例1:等于比较指令。
比较以下两对数(5,6)和(5,5),并观察运行状态。
例2:不等于比较指令。
比较以下两对数(5,6)和(5,5),并观察运行状态。
例3:小于比较指令。
比较以下三对数(5,6),(6,5)和(5,5),并观察运行状态。
例4:大于等于比较指令。
比较以下三对数(5,6),(6,5)和(5,5),并观察运行状态。
3、综合练习实验习题1:比较IW0和MW0,如果IW0=MW0,则Q4.0为1;如果IW0~ 2 ~<MW0,则Q4.1为1,如果IW0>MW0,则Q4.2为1。
PLC 传送和比较指令的用法使用案例详细说明
1、比较指令CMP
CMP 指令有三个操作数:两个源操作数[S1.]和[S2.],一个目标操作数[D.],该指令将[S1.]和[S2.]进行比较,结果送到[D.]中。
CMP 指令使用说明如图所示。
2、区间比较指令ZCP
ZCP 指令是将一个操作数[S.]与两个操作数[S1.]和[S2.]形成的区间比较,且[S1.]不得大于[S2.],结果送到[D.]中。
ZCP 指令使用说明如图所示。
3、传送指令MOV
MOV 指令将源操作数的数据传送到目标元件中,即[S.]→[D.]。
MOV 指令的使用说明如图所示。
当X0 为ON 时,源操作数[S.]中的数据K100 传送到目标元件D10 中。
当X0 为OFF,指令不执行,数据保持不变。
4、移位传送指令SMOV。
三菱plc常用的FNC指令一、程序流程控制指令——FNCO0~0900 CJ 条件转移01 CALL 子程序调用02 SRET 子程序返回03 IRET 中断返回04 EI 开中断05 DI 关中断06 FEND 主程序结束07 WDT 监控定时器刷新08 FOR 循环开始09 NEXT 循环结束二、传送、比较指令—FNC10~19 BIN----二进制BCD----十进制10 CMP 比较11 ZCP 区间比较12 MOV 传送13 SMOV BCD码移位传送14 CML 取反传送15 BMOV 数据块传送(n点→n点)16 FMOV 多点传送(1点→n点)17 XCH 数据交换,(DO)←→(D2)18 BCD BCD变换,BIN→BCD19 BIN BIN变换,BCD→BIN三、算术、逻辑运算指令—FNC20~29 BIN----二进制BCD----十进制20 ADD BIN加法21 SUB BIN减法22 MUL BIN乘法23 DIV BIN除法24 INC BIN加一25 BEC BIN减一26 WAND 字与27 WOR 字或28 WXOR 字异或29 NEG 求BIN补码四、循环、移位指令—FNC30~3930 ROR 循环右移31 ROL 循环左移32 RCR 带进位循环右移33 RCL 带进位循环左移34 SFTR 位右移35 SFTL 位左移36 WSFR 字右移37 WSFL 字左移38 SFWR FIFO写入39 SFRD FIFO 读出五、数据处理指令—FNC40~4940 ZRST 区间复位41 DECO 解码42 ENCO 编码43 SUM 求置ON位总数44 BON ON位判别45 MEAN 求平均值46 ANS 信号报警器标志置位47 ANR 信号报警器标志复位48 SQR BIN平方根49 FLT BIN整数→BIN浮点数六、高速处理指令——FNC50~5950 REF 输入输出刷新51 REFF 输入滤波时间常数调整52 MTR 矩阵输入53 HSCS 高速记数器比较置位54 HSCR 高速记数器比较复位55 HSZ 高速记数器区间比较56 SPD 速度检测57 PLSY 脉冲输出58 PWM 脉冲宽度调制59 PLSR 带加减速功能的脉冲输出七、方便指令—FNC60~6960 IST 状态初始化61 SER 数据搜索62 ABSD 绝对值凸轮顺控63 INCD 增量凸轮顺控64 TTMR 示教定时器65 STMR 专用定时器—可定义66 ALT 交替输出67 RAMP 斜坡输出68 ROTC 旋转工作台控制69 SORT 数据排序八、外部IO设备指令—FNC70~7970 TKY 10键输入71 HKY 16键输入72 DSw 拨码开关输入73 SEGD 七段译码74 SEGL 带锁存的七段码显示75 ARWS 方向开关76 ASC ASCII 码转换77 PR 打印输出78 FROM 读特殊功能模块79 TO 写特殊功能模块九、外围设备指令—FNC80~8980 RS RS-232C串行通讯81 PRUN 并行运行82 ASCI 十六进制→ASCII83 HEX ASCII→十六进制84 CCD 校验码85 VRRD 电位器读入86 VRSC 电位器设定88 PID PID控制十、F2外部模块指令—FNC90~9990 MNET F-16N,Mini网91 ANRD F2-6A,模拟量输入92 ANW* *2-6*,模拟量输出93 RMST F2-32RM,启动RM94 RMWR F2-32RM,写RM95 RMRD F2-32RM,读RM96 RMMN F2-32RM,监控RM97 BLK F2-30GM,指定块98 MCDE F2-30GM,机器码十一、浮点数运算指令—FNC110~132110 ECMP BIN浮点数比较111 EZCP BIN浮点数区间比较118 EBCD BIN浮点数→BCD浮点数119 EBIN BCD浮点数→BIN浮点数120 EADD BIN浮点数加法121 ESUB BIN浮点数减法122 EMUL BIN浮点数乘法123 EDIV BIN浮点数除法127 ESQR BIN浮点数开方129 INT BIN浮点数→BIN整数130 SIN BIN浮点数正弦函数(SIN)131 COS BIN浮点数余弦函数(COS)132 TAN BIN浮点数正切函数(TAN)十二、交换指令—FNC147147 SWAP 高低字节交换十三、定位指令—FNC155~159155 ABS 读当前绝对值位置156 ZRN 返回原点157 PLSY 变速脉冲输出158 DRVI 增量式单速位置控制159 DRVA 绝对式单速位置控制十四、时钟运算指令—FNC160~169160 TCMP 时钟数据比较161 TZCP 时钟数据区间比较162 TADD 时钟数据加法163 TSUB 时钟数据减法166 TRD 时钟数据读出167 TWR 时钟数据写入169 HOUR 小时定时器十五、变换指令—FNC170~177170 GRY 二进制数→格雷码171 GBIN 格雷码→二进制数176 RD3A 读FXon-3A模拟量模块177 WR3A 写FXon-3A模拟量模块十六、触点比较指令—FNC224~246224 LD= (S1)=(S2)时运算开始之触点接通225 LD> (S1)>(S2)时运算开始之触点接通226 LD< (Sl)<(S2)时运算开始之触点接通228 LD<> (S1)≠(S2)时运算开始之触点接通229 LD≤ (S1)≤(S2)时运算开始之触点接通230 LD≥ (S1)≥(S2)时运算开始之触点接通232 AND= (S1)=(S2)时串联触点接通233 AND> (S1)>(S2)时串联触点接通234 AND< (S1)<(S2)时串联触点接通236 AND<> (S1)≠(S2)时串联触点接通237 AND≤ (S1)≤(S2)时串联触点接通238 AND≥ (S1)≥(S2)时串联触点接通240 OR= (S1)=(S2)时并联触点接通241 OR> (S1)>(S2)时并联触点接通242 OR< (S1)<(S2)时并联触点接通244 OR<> (S1)≠(S2)时并联触点接通245 OR≤ (S1)≤(S2)时并联触点接通246 OR≥ (Sl)≥(S2)时并联触点接通。
比较指令有比较(CMP)、区域比较(ZCP)两种,CMP的指令代码为FNC10,ZCP的指令代码为FNC11,两者待比较的源操作数[S·]均为K、 H、KnX、KnY、KnM、KnS、T、C、D、V、Z,其目标操作数[D·]均为Y、M、S。
CMP指令的功能是将源操作数[S1·]和[S2·]的数据进行比较,结果送到目标操作元件[D·]中。
在图13-3中,当X0为ON时,将十进制数100与计数器C2的当前值比较,比较结果送到M0~M2中,若100>C2的当前值时,M0为ON,若100=C2的当前值时,M1为ON,若100<C2的当前值时,M2为ON。
当X0为OFF时,不进行比较,M0~M2的状态保持不变。
ZCP指令的功能是将一个源操作数[S·]的数值与另两个源操作数[S1·]和[S2·]的数据进行比较,结果送到目标操作元件[D·]中,源数据[S1·]不能大于[S2·]。
在图13-4中,当X1为ON时,执行ZCP指令,将T2的当前值与10和150比较,比较结果送到M0~M2中,若10>T2的当前值时,M0为ON,若10≤T2的当前值≤150时,M1为ON,若150<T2的当前值时,M2为ON。
当X1为OFF时,ZCP指令不执行,M0~M2的状态保持不变。
比较指令CMP ZCP比较指令包括CMP(比较)和ZCP(区间比较)二条。
(1)比较指令CMP (D)CMP(P)指令的编号为FNC10,是将源操作数[S1.]和源操作数[S2.]的数据进行比较,比较结果用目标元件[D.]的状态来表示。
如图3-33所示,当X1为接通时,把常数100与C20的当前值进行比较,比较的结果送入M0~M2中。
X1为OFF时不执行,M0~M2的状态也保持不变。
图1 比较指令的使用(2)区间比较指令ZCP (D)ZCP(P)指令的编号为FNC11,指令执行时源操作数[S.]与[S1.]和[S2.]的内容进行比较,并比较结果送到目标操作数[D.]中。
【】一、通用数据传送指令1、传送指令MOV (move)指令的汇编格式:MOV DST,SRC指令的基本功能:(DST)<-(SRC) 将原操作数(字节或字)传送到目的地址。
指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。
指令的执行对标志位的影响:不影响标志位。
指令的特殊要求:目的操作数DST和源操作数SRC不允许同时为段寄存器;目的操作数DST不能是CS,也不能用立即数方式。
2、进栈指令PUSH (push onto the stack)出栈指令 POP (pop from the stack)指令的汇编格式:PUSH SRC ;POP DST指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。
PUSH SRC (SP)<-(SP)-2 ;(SP)<-(SRC)POP DST (DST)<-((SP));(SP)<-(SP)指令支持的寻址方式:push 和 pop指令不能不能使用立即数寻址方式。
指令对标志位的影响:PUSH 和 POP指令都不影响标志位。
指令的特殊要求:PUSH 和 POP指令只能是字操作,因此,存取字数据后,SP的修改必须是+2 或者 -2; POP指令的DST不允许是CS寄存器;3、交换指令XCHG (exchange)指令的汇编格式:XCHG OPR1,OPR2指令的基本功能:(OPR1)<->(OPR2)指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。
指令对标志位的影戏:不影响标志位。
指令的特殊要求:不允许使用段寄存器。
二、累加器专用传送指令4、输入指令IN (input)输出指令 OUT (output)指令的汇编格式:IN ac,port port<=0FFHIN ac,DX port>0FFHOUT port,ac port<=0FFHOUT DX,ac port>0FFH指令的基本功能:对8086及其后继机型的微处理机,所有I/O端口与CPU之间的通信都由输入输出指令IN和OUT来完成。
2、编写程序实现以下控制:
PLC通电后,首先进入密码输入页面;
如密码正确(2012),按下列条件进入不同页面:
(1) 如开关打在左边,则进入手动页面;
(2) 如开关打在右边,则进入自动页面;
报警页面中的报警信号有:卡机报警(Y12),缺料报警X2,气缸未定位报警s901,计数报警C10。
编程思路:
1、PLC上电后,首先把页面编号1,传送给页面切换寄存器D;
2、使用比较指令,判断输入的密码是否为2012;
3、密码正确的情况下:如X1=1, 把页面编号3,传送给页面切换寄存器D;
4、密码正确的情况下:如X1=0, 把页面编号2,传送给页面切换寄存器D;
5、如有任何报警,让主电机Y10停机,蜂鸣器Y11响,如按下M34,则Y11
不响。
6、M30,M31分别给D200,D225清零。
3.1 传送指令
今天,我们来学习跟“数值传送”相关的功能指令。
在控制应用中,一个控制程序总是需要初始数据,这些数据可以通过各种方式获得,如从外部器件读取,或在程序开始运行时,从内部存储单元获取,因此,机内的数据传送是不可缺少的。
一、传送指令的“助记符”
在三菱的指令系统里,比较指令的“指令记号”是MOV,也就是Move (移动,运输)的简写。
二、传送指令的格式
“比较指令的指令格式”如下:
其中:
是传送源;是传送目标。
指令规定:
传送源:可以是字元件,如T、C、D、V/Z,也可以是位组合的字元件KnX,KnY,KnM,KnS,当然可以是十进制数K、十六进制数H。
是传送目标:必须是字元件,如T、C、D、V/Z,也可以是位组合的字元件KnY,KnM,KnS。
操作数格式如下所示:
三、传送指令的常用用法
传送指令一般用于读出内部存储器件的当前值、数据间接赋值和位传送。
1、读出内部存储器件的当前值
此行程序表示,当X1导通时,将定时器T0的当前计时值读出,存储在数据寄存器D20中。
2、数据间接赋值
上述程序表示,当X2导通时,将K100传送给数据寄存器D10,当X2关断时,将K50传送给数据寄存器D10,当M0导通时,定时器T20开始计时。
可以看出,通过X2的开、关,可以对定时器T20设定2个设定值。
3、位传送
上图左侧为基本指令的梯形图,表示X0(或X1\X2\X3)导通时,Y0(或
Y1\Y2\Y3)导通,我们可以使用右侧MOV指令来替代。
3.2 比较指令
今天,我们来学习跟“数值比较”相关的功能指令。
在控制应用中,经常需要将某个物理量的数值变化作为控制点,如温度低于多少度就打开电热器,速度高于或低于一个区间就报警等。
因此,作为一个控制“阀门”,比较指令常出现在工业控制程序中。
一、比较指令的“助记符”
比较指令的“指令记号”是CMP,也就是compare的简写。
比较指令有连续执行型(D)CMP和脉冲执行型(D)CMPP,DCMP(P)表示32位数据的比较。
二、比较指令的格式
“比较指令的格式”如下:
其中:
S1和S2是源操作数,即两个进行数值比较的对象;
D是目标操作数,即根据比较结果所输出的结果。
指令规定:
源操作数(S1,S2):可以是处理数据的字元件,如T、C、D、V/Z,也可以是位组合的字元件KnX,KnY,KnM,KnS,当然可以是十进制数K、十六进制数H。
目标操作数(D):必须是位元件,如Y、M、S。
如操作数不完整,或者指定的操作数不符合要求,使用比较指令就会出错。
操作数格式如下所示:
三、比较指令的示例
我们看一个示例:
当X0满足条件(接通)时,指令执行,S1和S2进行比较有三种结果:大于、等于、小于。
一般,我们把要比较的基准值放在前面,也就是S1(在示例是K100),把变化的数值放在后面,也就是S2(在示例中是计数器C20),如下图所示。
根据上述三种比较结果,目标操作数D的结果如下:
S1> S2;也就是C20<K100,位元件D变ON;
S1= S2;也就是C20=K100,位元件D+1变ON;
S1< S2;也就是C20>K100,位元件D+1变ON。
大家要注意到:在示例中目标操作数为m0,则m1、m2被自动占用。
“触点比较指令”
2、触点比较指令
在工业控制中,经常需要反复使用CMP指令或ZCP指令,这时使用触点比较指令会非常方便,同时,触点比较指令为上下限控制以及数值条件判断提供了方便。
(1)触点比较指令的说明
触点比较指令相当于一个触点,指令执行时,比较两个操作数[S1]、[S2],满足比较条件,则触点闭合。
触点比较指令的“助记符”即为数学运算符号“>”(大于)、“<”(小于)、“≥”(大于等于)、“≤”(小于等于)、“=”(等于)、“< >”(不等于)。
触点比较指令格式,示例如下:
如上图所示为判断S1和S2是否相等的触点比较指令,如相等此触点导通。
当进行32位的数值比较时,指令的“助记符”前要加D,如下例所示。
当X0处于ON,数据寄存器D11,D10的内容小于678493时,驱动M0。
触点比较指令作为一个触点,可以和母线直接相连,也可以串联和并联。
如下例所示即为两个触点比较指令串联使用,形成一个比较区域。
如上图所示为判断S是否在(S1,S2)范围内,即两个触点都满足条件时,这一行程序才能执行和输出动作。
(2)触点比较指令的应用
如下程序为一个霓虹灯循环点亮控制程序。
12盏灯分别接在PLC的Y0—Y13输出端,X0端接启动按钮。
当X0接通,计时器T0开始循环计时,K60是计时6秒钟。
当X0断开,0送入将Y0—Y13,即所有彩灯都熄灭。