程序控制指令

合集下载

第六章2程序流控制指令

第六章2程序流控制指令

计数器比较置位指令)而中断执行中断程序的场合。
计数器中断指针为I0□0(□=1~6,计数器中断6点,不可 重复使用)。计数器中断与HSCS(高速计数器比较置位)指 令配合使用,根据高速计数器的计数当前值与计数设定值的 关系来确定是否执行相应的中断服务程序。
图中,执行第3步,将K1000与C255的当前值比较,当C255的当 前值由999变到1000时,驱动计数器中断器I010(梯形图表示
子程序调用举例
程序功能是:X1、X2、X3分 别接通时,将相应的数据传送到 D0、D10,然后调用子程序;在 子程序中,将D0、D10存储的数 据相加,运算结果存储在D20, 用D20存储数据控制输出字元件 K1Y0。
四、中断指令
中断返回 IRET (Interruption Return) 开中断 EI (Interruption Enable) 关中断 DI (Interruption Disable) 均无操作数 I100
如图, • X000为ON时,程序跳到指针P8处。 • X000为OFF时,不执行跳转,程序按原顺序执行。 • 如果用M8000的常开触点驱动CJ指令,相当于无条件跳转指令,因为 运行时特殊辅助寄存器M8000总是ON。
用跳转指令实现选择运行程序段 应用跳转指令的程序结构如
图所示。X3是手动/自动选择
警戒定时器指令的应用
3. (1)WDT指令是在控制程序中刷新警戒定时器的指令。如果执行 程序的扫描周期时间(从0步到END或FEND指令之间)达200ms,则 PLC将停止运行。这时应将WDT指令插到合适的程序步中刷新警 戒时钟,以便程序得以继续运行直到END。例如将一个扫描周期 为240ms的程序分为2个120ms程序。如图所示,在这两个程序之 间插入WDT (2)如果希望每次扫描周期时间超过200ms,则可用移动指令MOV 把限制值写入特殊数据寄存器D8000

FX系列PLC的程序流向控制指令

FX系列PLC的程序流向控制指令

FNC12 MOV K150
D8000
WDT指令还可用于下列目的:当与CJ指令对应的标号的步序低于CJ指令步 序号时,在标号后编入WDT指令。可编入FOR—NEXT循环之中。
循环指令用于某种操作需反复进行的场合。二条指令总是成对
出现 , 相距最近的FOR指1令.和6 NE循XT环指令指是令一对 ,循环指令最多
(3)标号一般设在相关的跳转指令之后,也可以出现在跳转指令之前 但要注意从程序执行顺序来看,如果由于标号在前造成该程序的执行时间
超过了警戒时钟设定值,则程序就会出错。
(4)使用CJ(P)指令时,跳转只执行一个扫描周期 用辅助继电器M8000作为跳转指令的工作条件,跳转就成为无条件跳转。
(5)跳转可用来执行程序初始化工作。
注意 : (1)一个中断指针(I***)占一步,最多可设置9个中断点。 (3)其中2个中断点可产生多层中断。 (4)中断信号的脉宽必须超过200μs。 (5)多个中断信号顺序产生时,最先产生的中断信号有优先权。若2个 或2个以上的中断信号同时产生时,中断指针号较低的有优先权。 (6)如果中断信号产生于禁止中断区间(DI到EI范围),这中断信号 被存贮,并在EI指令之后被执行(除非相应的M805△为ON )。
X5
RST
T246
其是否具有掉电保持功能,由于
X7
元件
跳RS转T 前触C0点状态
跳转后触相点关状程态 序停止跳执转后行线,圈它状们态的现实
P8 P9
X6
Y、M、X1S0
X11
1ms定时 10m器s,X0
100mX1s2 定时X器13
XT214、6 XK21、00X0 3
XC05 OFOKFF2,0F X6
100ms 定时器

3.3.5 程序控制类指令

3.3.5  程序控制类指令

1. 无条件转移指令(1)jmp段内直接短程转移Jmp short标号jmp short loop1next:下一条指令………loop1:……….(loop1也可能在跳转指令前)跳转距离范围是-128-127(2) 段内直接近程转移Jmp near ptr标号跳转距离范围是-32768-32767(3)段内直接转移Jmp bx ; IP<—bxJmp word ptr [1000h] ;IP<—word ptr[1000h](4)段间直接转移Jmp far ptr标号(5)段间间接转移Jmp dword ptr [1000h] ;IP<—word ptr[1000h],CS<—word ptr[1002h] 2. 过程调用指令call(1)段内直接调用Call near ptr过程名<=> Call过程名可以暂把过程名理解为标号先把下条指令的有效地址入栈(为了能够以后恢复),然后跳转到新地址Push ip; ip为该跳转指令的下一条指令的有效地址Ip<—ip+loop loop表示跳转距离(2)段内间接调用Call word ptr [1000h]被调用过程的有效地址保存在内存ds:[1000h]处Push ipIp<—word ptr [1000h](3)段间直接调用Call far ptr过程名Push cs ;先入csPush ip ;再入ipIp<—过程入口地址的偏移量Cs<—过程入口地址的段基址(4)段间间接调用Call dword ptr [1000h]Push cs ;先入csPush ip ;再入ipIp<—word ptr [1000h]Cs<—word ptr [1002h]3. 过程返回指令ret,类似C语言中的return;段内返回, 格式:ret作用相当于pop ip,回到调用过程时保存的地址继续执行下条指令段间返回,格式:ret相当于pop ipPop cs回到调用过程时保存的地址继续执行下条指令带立即数返回,格式:ret n除返回原来的ip和cs外,还做sp=sp+n适用于过程带参数的情况,计算机调用函数或过程时,先把参数的值入栈,再把返回地址(下条指令地址)入栈。

程序控制指令

程序控制指令
JNS 目标标号
2020/8/15
符号标志位为1转移
JS 目标标号4
类别
循环控制 (CX/ZF)
中断
2020/8/15
续表(4)
指令名称
指令格式
循环
LOOP 目标标号
等于/结果为0循环 LOOPE/LOOPZ目标 标号
不等于/结果不为0循 LOOPNE/LOOPNZ目

标标号
CX内容为0转移
JCXZ目标标号
例1:JMP SI ; 近距离
若(SI)=1200H,则指令执行后 ,(IP)=1200H,于是转向代码段的偏移地址 1200H处开始执行。
注意:目标地址以段内偏移的形式给出 ,而不是相对于IP的位移量,所以它是一个 16位的操作数。
2020/8/15
10
无条件段内转移
• 间接转移:

JMP BX
例中的DWORD PTR表示转移地址是一个 双字。
例:JMP FAR PTR far_label ;远距离 其中的far_label为远类型的标号。
2020/8/15
13
无条件段间转移
• 直接转移:
JMP FAR PTR Lable
IP
远地址标号
CS

JMP

XXH

XXH
段 1
XXH
XXH
2020/8/15


CS : IP= Label



高于/不低于也不等于转移 JA/JNBE 目标标号 高于或等于/不低于转移 JAE/JNB 目标标号 低于/不高于也不等于转移 JB/JNAE 目标标号 低于或等于/不高于转移 JBE/JNA 目标标号

ABB机器人标准指令详解

ABB机器人标准指令详解

ABB机器人标准指令详解一、 RAPID程序控制指令1、1程序开始/结束控制指令1) PROGRAM START/END1、指令格式: PROGRAM <程序名> <属性> ;2、描述:此指令标识一个机器人程序的开始或结束。

在这里,<程序名>是你给程序取的名字,<属性>是可选的,表示程序的属性(如:INTERLOCK, NO_INTERLOCK, NOPROGRAM等)。

2) JOB START/END1、指令格式: JOB <作业名> <属性> ;2、描述:此指令标识一个作业的开始或结束。

在这里,<作业名>是你给作业取的名字,<属性>是可选的,表示作业的属性(如:INTERLOCK, NO_INTERLOCK, NOPROGRAM等)。

1、2程序转移指令1) GOTO1、指令格式: GOTO <行号>;2、描述:此指令将程序执行转移到指定的行号。

2) GOSUB1、指令格式: GOSUB <行号>;2、描述:此指令将程序执行转移到指定的行号,并在返回时继续执行当前行。

3) RETURN1、指令格式: RETURN;2、描述:此指令将程序执行从 GOSUB转移到父程序,并从 GOTO转移到原程序行。

1、3条件判断指令1) IF/THEN/ELSE/ENDIF;1、指令格式: IF <条件> THEN <表达式> ELSE <表达式> ENDIF;2、描述:如果满足条件<条件>,则执行 THEN后面的表达式;否则执行 ELSE后面的表达式。

2) CASE/ESAC/ENDCASE;1、指令格式: CASE <变量> IN <表达式1> / <表达式2> /... / ENDCASE;2、描述:此指令根据变量<变量>的值选择要执行的表达式。

5.2 程序控制指令(新修改)

5.2 程序控制指令(新修改)

NEXT
4) 循环指令可以进行嵌套编程,最多可嵌套8层,单个循 环指令之间不能交叉。图所示为2层嵌套使用。
5.2.4
子程序
子程序是结构化编程的有效工具,它可以把功能独 立的,且需要多次使用的部分程序单独编写,供主程序 调用。子程序能够使程序结构清晰、功能明确,并且简 单易读。要使用子程序,首先要建立子程序,然后才能 调用子程序。 1. 建立子程序 可以选择编程软件“编辑”菜单中的“插入”子菜 单下的“子程序”命令来建立一个新的子程序。默认的 子程序名为SBR_N,编号N的范围为0~63,从0开始按顺 序递增,也可以通过重命名命令为子程序改名。
2. 子程序调用:CALL、CRET指令 1) 指令梯形图与指令表格式
名 指令
称 CALL
子程序调用 CALL SBR_N
SBR_N EN
子程序结束 CRET CRET
指令表格式 梯形图格式
RET
2) 指令功能 CALL 子程序调用指令,当EN端口执行条件存在时, 将主程序转到子程序入口开始执行子程序。SBR_N是子 程序名,标志子程序入口地址。 CRET 有条件子程序返回指令,在其逻辑条件成立时, 结束子程序执行,返回主程序中的子程序调用处继续向 下执行。
5.2.3
循环指令FOR和NEXT
1) 指令格式及操作数
FOR、NEXT指令的基本格式 名 称 循环开始 循环结束 NEXT NEXT
指令 指令表格式
FOR
FOR INDX,INIT,FINAL
FOR EN ENO
梯形图格式
INDX INIT FINAL
NEXT
2) 指令功能 FOR 标记循环程序的开始。 NEXT 标记循环程序的结束,无操作数。

程序控制类指令的功能

程序控制类指令的功能

程序控制类指令的功能
程序控制类指令是用于控制程序的执行流程和逻辑的指令。

它们决定了程序中各个部分的执行顺序和条件。

以下是几种常见的程序控制类指令及其功能:
1. 条件控制指令:条件控制指令用于根据特定条件决定程序执行的路径。

最常见的条件控制指令是if语句,它根据一个条件的真假来决定程序中的某段代码是否执行。

如果条件为真,那么if语句块中的代码将被执行;否则,程序将继续执行下一个语句。

2. 循环控制指令:循环控制指令用于重复执行一段代码,直到满足特定条件为止。

常见的循环控制指令包括for循环、while循环和do-while循环。

for循环在执行前会定义一个计数器,然后在每次循环迭代中对其进行更新;while循环会在每次循环迭代前检查一个条件;do-while循环会先执行一次循环体,然后再检查条件。

3. 跳转指令:跳转指令用于改变程序执行的顺序,将控制传递到程序的其他部分。

最常见的跳转指令是goto语句,它可以将控制无条件地转移到程序的另一个标记位置。

然而,使用goto语句可能导致程序变得难以理解和维护,因此在现代编程中很少使用。

4. 函数调用指令:函数调用指令用于调用和执行程序中定义的函数。

函数是一段独立的代码,可以接受输入参数并返回一个值。

使用函数调用指令可以将程序的执行流程转移到函数中执行,并在执行完毕后返回到调用点继续执行。

这些程序控制类指令在编程中起到了至关重要的作用,帮助程序员实现复杂的逻辑和控制程序的行为。

通过合理使用这些指令,我们可以编写出结构清晰、逻辑严谨的程序。

11程序控制指令

11程序控制指令
S7-200的程序控制指令
1.条件结束指令
有条件结束(END)指令根据前一个逻辑 条件终止用户用户程序; 只能用在主程序中使用,不能在子程序或 中断程序中使用。 当I0.2=0时,I0.0接通, Q0.0和Q0.1都会接通; 当I0.2=1时,I0.0接通, Q0.0接通,Q0.1不会接通。

2.停止指令
停止指令将CPU从run状பைடு நூலகம்转换为stop模式 终止程序执行。 如果在中断程序中执行stop指令,中断指令 立即终止,并忽略全部待执行的中断,转 到扫描循环中的剩余程序,包括执行主用 户程序和子程序,在当前扫描结束时从run 转换至stop模式。

3.FOR-NEXT循环指令

1. 建立子程序

可用编程软件Edit菜单中的Insert选项,选 择Subroutine,以建立或插入一个新的子程 序,同时在指令树窗口可以看到新建的子 程序图标,默认的程序名是SBR_n,编号n 从0开始按递增顺序生成,可以在图标上直 接更改子程序的程序名。在指令树窗口双 击子程序的图标就可对它进行编辑。
FOR指令是控制执行FOR和NEXT之间的指令 次数的操作; 使用FOR指令必须指点当前循环计数(INDX)、 起始值(INIT)和结束值(FINAL)。NEXT指 令是FOR循环结束标记,并将堆栈顶值设为1。 FOR指令和NEXT指令必须成对使用; 嵌套深度可达八级;
每次启用FOR指令时,它将 初始值复制至循环计数(INDX); 假定初始值(INIT)等于1,结束值(FINAL) 等于10,FOR与NEXT之间的指令被执行10 次。INDX值递增“1”:1、2、3…10。如果 起始值大于结束值,则不执行循环。每次执 行FOR和NEXT指令之后,INDX值递增“1”, 并将结果与结束值比较,如果循环计数 (indx)大于结束值,循环则终止。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2020/4/22
3
续表(3)
类别
指令名称
指令格式
条件转移
小于或等于/不大于转
(有符号数 OF/SF/ZF)

溢出转移
JLE/JNG 目标标号 JO 目标标号
不溢出转移
JNO 目标标号
条件转移 (OF/PF/SF)
奇偶位为0/奇偶性为 奇转移
奇偶位为1/奇偶性为 偶转移
符号标志位为0转移
JNP/JPO 目标标号 JP/JPE 目标标号
(3)LOOPNZ (LOOPNE) 类比 串前缀REPNZ/NE
格式:LOOPNZ label 操作:(CX)-1→CX;
若(CX)≠0∧ZF=0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。
2020/456个内存单元均减去1, 若发现某个单元减为0则立即退出循环,其后的 单元不再减1。程序段如下:(逻辑地址为 1A00:0H)
高于/不低于也不等于转移 JA/JNBE 目标标号 高于或等于/不低于转移 JAE/JNB 目标标号 低于/不高于也不等于转移 JB/JNAE 目标标号 低于或等于/不高于转移 JBE/JNA 目标标号
2020/4/22
2
类别
条件转移 (CF/ZF)
条件转移 (有符号数) (OF/SF/ZF)
续表(2)
;小于或等于则转移(dist≤src)
转移条件为: (SF⊕OF=1)∨ZF=1
2020/4/22
21
③根据CX内容来决定是否转移的转移指令 JCXZ label 若(CX)=0,则转移到label处开始执行。
2020/4/22
22
条件转移指令举例:以十六进制数形式显示BX中的内容。
MOV BX, 1234H MOV CH, 4 ROT: MOV CL, 4 ROL BX, CL MOV AL, BL AND AL, 0FH ADD AL, 30H CMP AL, 39H JBE DISP ADD AL, 7 DISP: MOV DL, AL MOV AH, 2 INT 21H DEC CH JNZ ROT MOV DL, 48H MOV AH, 2 INT 2020/4/22 21H
在汇编语言中,段内间接寻址通常写成: JMP WORD PTR[BX+DI]
表示所取得的目标地址是一个字。
2020/4/22
12
③段间直接转移 在指令中直接给出要转移到的目的段地
址和偏移地址。 例:JMP 2000H:1000H ;远距离
执行时,(IP)←1000H,(CS)←2000H
注意:直接地址为符号地址时,段间直接转 移指令中的符号地址前应加操作符FAR PTR。
指令名称
指令格式
进位位为1转移
JC 目标标号
进位位为0转移
JNC 目标标号
等于/结果为0转移
JE/JZ 目标标号
不等于/结果不为0转移 JNE/JNZ 目标标号
大于/不小于也不等于转移 JG/JNLE 目标标号
大于或等于/不小于转移 JGE/JNL 目标标号
小于/不大于也不等于转移 JL/JNGE 目标标号
① 段内直接转移: JMP disp
指令中给出的8/16位的位移量加到IP, CS保持不变。
② 段内间接转移: JMP reg / mem
reg/mem中的16位偏移地址送IP, CS保持不变。
③ 段间直接转移 JMP segment : offset
指令中给出的16位的段和16位的偏移地址送到CS和IP。
JMP BX




JMP WORD PTR[BX] CS : IP 指令码
2020/4/22
IP BX=1200

XXH

XXH



11
例2:JMP [BX+DI] 设指令执行前: (DS)=3000H,(BX)=1300H, (DI)=1200H,(32500H)=2350H; 则指令执行后:(IP)=2350H
; 最后显示’H’
23
2.循环控制指令
• 用在循环程序中以确定是否要继续循环。 • 循环次数通常置于CX中。 • 转移的目标应在距离本指令-128~+127的
范围之内(短跳转)。 • 循环控制指令不影响标志位。
2020/4/22
24
(1) LOOP
格式:LOOP label 类比 串前缀REP 操作:(CX)-1→CX;
3.3.5 程序控制指令
控制转移指令分为: –转移指令 –循环控制指令 –调用和返回指令 –中断指令
2020/4/22
1
表4-6 控制转移类指令
类别
指令名称
指令格式
无条件转移
无条件转移
JMP目标标号
调用/返回
过程调用
CALL 过程名
调用/返回
过程返回
RET 弹出值
条件转移 (无符号数)
(CF/ZF)
2020/4/22
20
判断有符号数的大小
JG
;大于则转移(dist>src)
转移条件为: (SF⊕OF=0)∧ZF=0
JGE
;大于或等于则转移(dist≥src)
转移条件为: (SF⊕OF=0)∨ZF=1
JL
;小于则转移(dist<src)
转移条件为: (SF⊕OF=1)∧ZF=0
JLE
4000 DS
+) 1212 SI
41212
41212 41213 41214 41215
11111111 11101100
00 10 00 4A
DS:[SI]
1000 IP 4A00 CS
段间间接转移操作示意图
2020/4/22
17
(2)条件转移指令 - JXX
• 条件转移指令可实现程序的条件分支。 • 条件转移指令根据标志位的状态来决定是
MOV AX, 1A00H
MOV DS, AX
; 1A00H段
MOV DI, -1
MOV CX, 256
GOON: INC DI
DEC BYTE PTR[DI]
LOOPNZ GOON
HLT
2020/4/22
27
例2:在8000H开始的长度为1000字节的字符串中查找 ’S’,若找到,把其偏移地址记录在ADDR中,否则 ADDR单元置为0FFFFH。
中断 溢出时中断
INT 中断类型 INTO
中断返回
IRET 5
1.转移指令
➢转移指令的实质: 改变IP(或者CS和IP)的内容。
➢对标志位flags的影响: 所有转移指令不会影响标志位flags。
➢分类: 分为无条件转移和条件转移两种。
2020/4/22
6
(1) 无条件转移指令 - JMP
本指令无条件转移到指定的目标地址, 以执行 从该地址开始的程序段。根据设置CS、IP的方法 ,JMP指令可实现短\近\远距离跳转, 指令分成4 种情况。
; CH做循环计数器 ; CL做移位计数器 ; 将最高4位移到低4位
; 取出低4位 ; 转换为ASCII码 ; 与 ’9’ 比较 ; 若(AL)≤‘9’, 则转显示 ; 若(AL)>’9’, 再加7转为‘A’-‘F’ ; (DL)←字符
; 显示输出 ; 4个十六进制数显示完否? ; 没有, 循环
; ‘H’
例:JMP FAR PTR far_label ;远距离 其中的far_label为远类型的标号。
2020/4/22
13
无条件段间转移
• 直接转移:
JMP FAR PTR Lable
IP
远地址标号
CS

JMP

XXH

XXH
段 1
XXH
XXH
2020/4/22


CS : IP= Label



2
14
④段间间接转移
转移的目的地址(段和偏移)在两个相 邻的字存储单元中。例如:
JMP DWORD PTR[SI] ; 远距离 设指令执行前:(DS)=4000H,(SI)=1212H,
(41212H)=1000H,(41214H)=4A00H 则指令执行后:(IP)=1000H,(CS)=4A00H 于是转到4B000H处开始执行指令。
否进行分支转移。 • 格式:JXX label;xx为条件名称缩写 • 指令的转移范围为-128~+127字节(短跳转)。 • 主要的条件转移指令参见p142表3-7。
2020/4/22
18
① 根据单个标志位设置的条件转移指令
JB/JC
;低于,或CF=1,
则转移
JNB/JNC/JAE ;不低于,或CF=0,高于或等于, 则转移
若(CX)≠0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。
注:LOOP指令与下面的指令段等价:
DEC CX JNZ label
2020/4/22
25
(2)LOOPZ (LOOPE) 类比 串前缀REPZ/E
格式:LOOPZ label 操作:(CX)-1→CX;
若(CX)≠0∧ZF=1,则转至label处执行; 否则退出循环,执行LOOP后面的指令。
JP/JPE JNP/JPO
;奇偶标志PF=1(偶), ;奇偶标志PF=0(奇),
则转移 则转移
JZ/JE JNZ/JNE
;结果为零(ZF=1), ;结果不为零(ZF=0),
则转移 则转移
JS
;SF=1,
JNS
;SF=0,
则转移 则转移
相关文档
最新文档