第12讲 跳转与子程序指令

合集下载

子程序的基本格式和有关指令.ppt

子程序的基本格式和有关指令.ppt

6.1.1 堆栈段
图6.1是堆栈的物理结构示意图,图中标出的SS和SP是与 堆栈密切相关的寄存器,SS存放堆栈所占用内存区域的段地 址,SP所指向的位置称为栈顶。
SS:SP
栈顶指针
栈的空闲区
已入栈的数据存放区
一个程序如果要使用堆栈,必须先留出一片连续内存区 域,方法是在程序中定义一个堆栈段。
【基本格式】 段名 SEGMENT STACK DW n DUP(?) 段名 ENDS 【说明】
6.2.2 子程序相关指令
6.2.2.1 CALL指令
【指令格式】CALL 子程序名
【功能】这是调用子程序的指令。根据被调用的子程序的 类型不同,CALL指令的功能分为两种情况:
(1)如果被调用的子程序是NEAR类型,则先把当前指令指 针IP的值入栈,这会使SP的值减2,然后把IP改成子程序的第 1条指令的偏移地址。
【例6.2】分析下面的程序段的执行过程,以及在执行过 程中堆栈及指令指针IP的变化情况,并假设在执行CALL指令 前,SP的值是0FEH。
subp PROC NEAR
INC AL ;假设本指令所在的偏移地址是1234H
RET
subp ENDP
5678H
CALL MOV
subp AX,BX
;假设本指令所在的偏移地址是
PUSH AX
PUSH BX
POP AX
POP BX
【解】堆栈变化见图6.2,程序段执行完后AX=307CH, BX=4F8AH。
SP→
XX 0FFC
XX
XX 0FFD
XX
XX 0FFE SP→ 8A
XX 0FFF
4F
YY 1000
Байду номын сангаас

子程序调用指令【精选】

子程序调用指令【精选】

子程序存储在存储器中,可供一个或多个调用程序(主程序)反复调用。

主程序调用子程序时使用CALL指令,由子程序返回主程序时使用RET指令。

由于调用程序和子程序可以在同一个代码段中,也可以在不同的代码段中,因此,CALL指令和RET指令也有近调用、近返回及远调用、远返回两类格式。

 ⑴ CALL NEAR PTR <子程序名> 近调用(near call) 近调用是CALL指令的缺省格式,可以写为"CALL <子程序名>rotine"。

它调用同一个代码段内的子程序(子过程),因此,在调用过程中不用改变CS的值,只需将子程序的地址存入IP寄存器。

CALL指令中的调用地址可以用直接和间接两种寻址方式表示。

 ⑵ CALL FAR PTR <子程序名> 远调用(far call) 远调用适用于调用程序(也称为主程序)和子程序不在同一段中的情况,所以也叫做段间调用。

和近调用指令一样,远调用指令中的寻址方式也可用直接方式和间接方式。

 ⑶ RET 返回指令(return) RET指令执行的操作是把保存在堆栈中的返回地址出栈,以完成从子程序返回到调用程序的功能。

● CALL <子程序名> 段内直接调用 执行操作:① (SP) ← (SP)-2,((SP)) ← (IP)当前 ② (IP) ← (IP)当前+16位位移量(在指令的第2、3个字节中) ● CALL DESTIN 段内间接调用 执行操作:① (SP) ← (SP)-2,((SP)) ← (IP)当前 ② (IP) ← (EA) ; (EA)为指令寻址方式所确定的有效地址 ● CALL FAR PTR <子程序名> 段间直接调用 执行操作:① (SP) ← (SP)-2,((SP)) ← (CS)当前 (SP) ← (SP)-2,((SP)) ← (IP)当前 ② (IP) ←偏移地址(在指令的第2、3个字节中) (CS) ←段地址(在指令的第4、5个字节中) ● CALL WORD PTR DESTIN 段间间接调用 执行操作:① (SP) ← (SP)-2,((SP)) ← (CS)当前 (SP) ← (SP)-2,((SP)) ← (IP)当前 ② (IP) ← (EA) ; (EA)为指令寻址方式所确定的有效地址 (CS) ← (EA+2) 从CALL指令执行的操作可以看出,第一步是把子程序返回调用程序的地址保存在堆栈中。

循环跳转及子程序应用指令

循环跳转及子程序应用指令

循环跳转及子程序应用指令循环跳转及子程序应用指令是计算机程序设计中的重要概念,主要用于实现程序的流程控制和模块化设计。

在下面的回答中,我将详细介绍循环跳转及子程序应用指令的定义、用途、实现方式和一些示例。

一、循环跳转的定义及用途循环跳转指的是在程序执行过程中,根据一定的条件或需要,跳转到指定的程序段或语句位置,实现程序的循环执行。

其主要用途有以下几个方面:1. 实现循环结构:循环跳转可以使程序段重复执行,实现循环结构,提高代码的复用性和效率。

通过循环跳转可以解决一些需要多次执行的问题,如计算1到100的累加和、打印乘法口诀表等。

2. 控制程序流程:通过循环跳转可以控制程序的流程,根据特定的条件来选择是否跳转和跳转到哪里。

在具体的应用中,可以根据业务需求来自定义循环判断条件,实现程序的灵活控制。

3. 处理异常情况:循环跳转还可以用于处理程序中的异常情况,当程序出现错误或异常时,可以通过循环跳转来进行错误处理,提高程序的稳定性。

二、循环跳转的实现方式及示例循环跳转可以通过不同的方式来实现,主要包括条件循环和计数循环两种方式。

1. 条件循环:条件循环是根据一定的条件来判断是否跳转的方式。

常见的条件循环控制指令有“IF-THEN”和“WHILE”等。

示例1:使用IF-THEN语句实现条件循环i = 1IF i <= 10 THENPRINT ii = i + 1GOTO 2END IF以上代码段通过设定条件变量i的初始值为1,并根据条件i小于等于10来判断是否跳转。

若满足条件,则输出i的值并将i自增1后再跳转到语句2,否则结束程序。

2. 计数循环:计数循环是通过指定循环次数来实现的方式。

常见的计数循环控制指令有“FOR”和“DO-WHILE”等。

示例2:使用FOR循环语句实现计数循环FOR i = 1 TO 10PRINT iNEXT i以上代码段通过设定循环计数变量i的初始值为1,循环次数为10,通过FOR 循环语句来实现循环。

汇编语言-子程序

汇编语言-子程序

STRUC可以把不同类型的数据放在同一个结构里,方便处理。
结构类型说明格式为:
structure_name STRUC

;DB、DW、DD等伪操作
structure_name ENDS
注意:ENDS之前为结构名,注意与段结束相区别。
例如:下列语句说明了一个名STUDENT的结构类型:
STUDENT STRUC
STRLEN1 : CMP AL , [SI] JZ Sቤተ መጻሕፍቲ ባይዱRLEN2 INC SI JMP STRLEN1
STRLEN2: MOV AX , SI SUB AX , [BP + 4] POP SI
POP DS POP BP RET STRLEN ENDP
主程序调用这个子程序的代码片段如下: PUSH AX PUSH AX MOV LEN , AX 如果过程和调用程序在同一文件(同 中的变量。
XOR SI , SI ;CF也会被清0
MADD1:MOV AX , WORD PTR DATA1[SI]
ADC AX , WORD PTR DATA2[SI]
MOV WORD PTR DATA3[SI] , AX
INC SI
INC SI
POP SI
LOOP MADD1
POP CX
MOV AL , 0
递归子程序的设计要点:
1. 递推性:逐级调用; 2. 回归性:逐层回归; 3. 有穷性:终止条件;
这3点为所有语言递归程序设计具有的共性。
汇编语言设计递归程序时的个性在于:
1. 参数和中间结果一般存于堆栈中,但有时也可以存于寄存器中; 2. 递归的深度受堆栈空间的限制。
例:子程序FACT采用递归算法实现阶乘。

第12讲 跳转与子程序指令

第12讲 跳转与子程序指令

3.指令说明 (1)CRET指令多用于子程序的内部,由判断条件决定是否结束 子程序的调用,RET用于子程序的结束。用编程软件编程时,在子程序 结束处,不需要输入RET指令,软件会自动在内部加到每个子程序的结 尾(不显示出来)。 (2)如果在子程序的内部又对另一子程序执行调用指令,则这 种调用称作子程序的嵌套。子程序的嵌套深度最多为8级。 (3)当一个子程序被调用时,系统自动保存当前的堆栈数据, 并把栈顶置1,堆栈中的其他值为0,子程序占有控制权。子程序执行 结束,通过返回指令自动恢复原来的逻辑堆栈值,调用程序又重新取得 控制权。
I/O分配如下: I0.0,上限位检测开关; I0.2,左限位检测开关; I0.1,下限位检测开关; I0.3,右限位检测开关;
I0.4,手动\自动切换, 当I0.4为OFF时手动控制,为ON时自动控制; I0.5,手动向上运行; I0.7,手动向左运行; I1.1,手动松开; I0.6,手动向下运行; I1.0,手动向右运行; I1.2,手动夹紧;
第12讲 跳转与子程序指令 讲
一、跳转指令 二、子程序指令
一、跳转指令
跳转有关的指令有两条:跳转指令(JMP)和标号指令(LBL)。
说明: (1)跳转指令和标号指令必须配合使用,而且只能使用在同一程序块 中,如主程序、同一主程序或同一个中断程序。不能在不同的程序块中 相互跳转; (2)执行跳转后,被跳过程序段中的各元件状态为: 1)Q、M、S、C等元件的位保持跳转前的状态; 2)计数器C停止计数,当前值存储器保持跳转前的计数值;
例: 编写一个计算Y=(X+30)×4÷5的子程序,使该公式能在多处调 用。其中X、Y的数据类型为整数。
子程序
主程序
用跳转指令来编写设备的手动与自动控制切换程序是一种常用的编 程方式。 例: 用跳转指令编程,控制两只灯,分别接于Q0.0、Q0.1。控 制要求如下: (1)要求能实现自动与手动控制的切换,切换开关接于I0.0,若I0.0 为OFF则为手动操作,若I0.0为ON,则切换到自动运行; (2)手动控制时,能分别用一个开关控制它们的启停,两个灯的启 停开关分别为I0.1、I0.2; (3)自动运行时,两只灯能每隔1s交替闪亮。

S7200程序控制类指令及应用.ppt

S7200程序控制类指令及应用.ppt

5
2020/1/11
二、跳转指令的应用实例
6
2020/1/11
7
2020/1/11
第二节 循环指令
一、循环指令及其功能 FOR-NEXT指令循环执行FOR(开始)指
令和NEXT(结束)指令之间的循环体(程序) 指令段一定次数。
FOR—NEXT指令可以实现8层嵌套。FOR 指令和NEXT指令必须成对使用,在嵌套程序 中距离最近的FOR指令及NEXT指令是一对。
中断事件可分为以下三大类:
1.通讯口中断 通讯口中断含端口0及端口1接收及发送相关中断。
PLC的串行通讯口可由梯形图或指令表程序来控制,这 种通讯口的操作模式称为自由端口模式。在自由端口 模式下,可由用户程序设置波特率、字符的位数、奇 偶校验及通信协议。接收及发送中断可以简化程序对 中断的控制。
19
定时器T32/96中断允许及时地响应一个给定 的时间间隔。这些中断只支持1ms分辨率的延时接 通定时器(TON)和延时断开定时器(TOF)T32和T96。 T32和T96的工作方式与普通定时器相同。中断允 许时且定时器的当前值等于预置值时,执行被连 接的中断程序。
21
2020/1/11
二、中断优先级及中断队列
程序控制类指令可以影响程序执行的流向及 内容,对合理安排程序的结构,提高程序功能以 及实现某些技巧性运算,具有重要的意义。
2
2020/1/11
第一节 跳转指令
一、跳转及标号指令
跳转指令使程序流程跳转到指定标号N处的程序分支执 行。
跳转指令
标号指令
N
N
(JMP)
LBL
JMP N
3
LBL N

2020/1/11

FX系列PLC功能指令相关知识讲解

FX系列PLC功能指令相关知识讲解
FNC 04 EI FNC 05 DI 四、主程序结束指令 FNC 06 FEND 五、警戒时钟定时器指令 FNC 07 WDT 六、循环指令 FNC 08 FOX FNC 09 NEXT
ቤተ መጻሕፍቲ ባይዱ
Date: 2023/12/9
Page: 9
电气控制与PLC应用
CH5 FX系列PLC编程元件及指令系统
一、条件跳转指令 FNC00 CJ
Date: 2023/12/9
Page: 22
电气控制与PLC应用
Date: 2023/12/9
Page: 2
电气控制与PLC应用
CH5 FX系列PLC编程元件及指令系统
5.1 功能指令的基本知识
一、基本格式
❖ 梯形图格式
又称应用指令,用于数据的 传送、运算、变换及程序控 制等功能。具有128种298条
X0
[S] [D] [n]
MEAN D0 D10 K3
(D0) (D1) (D2) (D10) 3
CH5 FX系列PLC编程元件及指令系统
❖ 说明 ➢ CJ指令跳过部分程序,可以缩短程序的扫描周期。 ➢ 一个指针只能出现一次。 ➢ 如果积算型定时器和计数器的RST指令在跳转程序之内,即使跳 转程序生效,RST指令仍然有效。 ➢ 该指令可以连续和脉冲执行方式。 ➢ 被跳过去的程序中各元件的状态为 ✓ Y、M、S保持跳转前状态不变。 ✓ 定时器T和计数器C如果被CJ指令跳过,跳转期间它们的当前 值将被保存。如果在跳转开始时定时器和计数器正在工作, 在跳转期间它们将停止定时和计数。 ✓ T192~T199和高速计数器C235~C255如果在驱动后跳转, 则继续工作,输出触点也会动作。
✓多个中断信号不同时产生时,按先后顺序中断。 ✓多个中断信号同时产生时,按指针大小中断。

S7-200 跳转和子程序调用指令

S7-200 跳转和子程序调用指令
从上述分析可以看出: 输入点I0.2为一方式选择 开关,通过它的通断来完 成一个2选1的控制
例4:
某生产线对产品进行加工处理,同时利用增 减计数器对成品进行累计,每当检测到10个成 品时,就要跳过某些控制程序,直接进入小包 装控制程序。每当检测到40个成品(4个小包 装),直接进入到大包装控制程序。
子程序调用指令
子程序调用指令
SBR_0 EN
CALL SBR _N
条件返回指令 ( RET ) CRET
CALL以指令盒的 形式表示; CRET以线圈的 形式表示。
子程序可以用 SBR_N的格式表示
子程序调用指令(SBR)
CALL SBR0//子程序调用 CRET//条件返回 RET//无条件返回(自动)
2 ( JMP )
手动程序 2
LBL
工作方式选 择开关
当I0.4接通时,JMP1 接通,跳转到LBL1,顺 序扫描手动程序。
当I0.4断开时,JMP1 未接通,不跳转,顺序 扫描自动程序,且 JMP2接通,跳转到LBL2, 不再执行手动程序。
子程序调用指令(SBR)
通常将具有特定功能、并且要多次 使用的程序段作为子程序子程序可以 多次被调用,也可以嵌套(最多8层) ,还可以递归调用(自己调自己)。
返回本节
带参数子程序调用指令格式举例
只能显示STL LD I0.0 CALL SBR0 I0.1 VB10 I1.0 &VB100 *AC1 VD200 可以在LAD和FBD中正确显示 LD I0.0 = L60.0 LD I0.1 = L63.7 LD L60.0 CALL SBR0, L63.7, VB10, I1.0, &VB100, *AC1, VD200
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Q0.0,驱动手抓夹紧;Q0.1,驱动上升; Q0.2,驱动下降;Q0.3,驱动左移; Q0.4,驱动右移。
编程思路如下:设计一个手动程序和一个自动程序,当I0.4为OFF时 调用手动子程序,当I0.4为ON时调用自动子程序。
主程序
右图为手动子程序,自动 子程序可参考第8讲中内容。
3. 带参数的子程序 子程序中可以有参变量,带参变量的子程序调用极大地扩大了子程 序的使用范围,增加了调用的灵活性。它主要用于功能类似的子程序块 的编程。子程序的调用过程如果存在数据的传递,则在调用指令中应包 含相应的参数。
(c)数据类型。局部变量表中还要对数据类型进行声明。数据类型
可以是:能流、布尔型、字节型、字型、双字型、整数型和实型。
(2) 参数子程序调用的规则 (1)常数参数必须声明数据类型。如值为223344的无符号双字作 为参数传递时,必须用DW#223344来指明。如果缺少常数参数的这一 描述,常数可能会被当作不同类型使用。 (2)输入或输出参数没有自动数据类型转换功能。如局部变量表 中声明一个参数为实型,而在调用时使用一个双字,则子程序中的值就 是双字。 (3)参数在调用时必须按照一定的顺序排列,先是输入参数,然 后是输入输出参数,最后是输出参数和暂时变量。
(3) 变量表的使用 按照子程序指令的调用顺序,参数值分配给局部变量存储器, 起始地址是L0.0。当在局部变量表中加入一个参数时,系统自动给各参 数分配局部变量存储空间。使用编程软件时,地址分配是自动的。在局 部变量表中要加入一个参数,单击要加入的变量类型区可以得到一个选 择菜单,选择“插入”,然后选择“下一行”即可。局部变量表使用局 部变量存储器L。
第12讲 跳转与子程序指令 讲
一、跳转指令 二、子程序指令
一、跳转指令
跳转有关的指令有两条:跳转指令(JMP)和标号指令(LBL)。
说明: (1)跳转指令和标号指令必须配合使用,而且只能使用在同一程序块 中,如主程序、同一主程序或同一个中断程序。不能在不同的程序块中 相互跳转; (2)执行跳转后,被跳过程序段中的各元件状态为: 1)Q、M、S、C等元件的位保持跳转前的状态; 2)计数器C停止计数,当前值存储器保持跳转前的计数值;
二、子程序指令
子程序在结构化程序设计中是一种方便有效的工具。S7-200 PLC的指 令系统具有简单、方便、灵活的子程序调用功能。与子程序有关的操 作有:建立子程序、子程序的调用和返回。 1. 建立子程序 操作编程软件
2. 子程序指令 子程序指令有2条:子程序调用指令(CALL)和子程序条件返回指 令(CRET)。
(4)累加器可在调用程序和被调用子程序之间自由传递,所以累
加器的值在子程序调用时既不保存也不恢复。 (5)当子程序在一个扫描周期内被多次调用时,在子程序中不能 使用上升沿、下降沿、定时器和计数器指令。
例: 简易机械手的控制。在第8讲中介绍了机械手的自动控制,如 图所示,现要求在原自动控制的基础上加手动控制,用一个输入点来 进行自动与手动操作的切换。要求机械手要原点才能开始自动运行。
3)对定时器来说,因刷新方式不同而工作状态不同。在跳转期间,分辨 率为1ms和10ms的定时器会一直保持跳转前的工作状态,原来工作的继 续工作,到设定值后,其位的状态也会改变,输出触点动作,其当前值 存储器一直累计到最大值32767才停止。对分辨率为100ms的定时器来 说,跳转期间停止工作,但不会复位,存储器里的值为跳转时的值,跳 转结束后,若输入条件允许,可继续计时,但已失去了准确计时的意义, 所以在跳转段里的定时器要慎用。
3.指令说明 (1)CRET指令多用于子程序的内部,由判断条件决定是否结束 子程序的调用,RET用于子程序的结束。用编程软件编程时,在子程序 结束处,不需要输入RET指令,软件会自动在内部加到每个子程序的结 尾(不显示出来)。 (2)如果在子程序的内部又对另一子程序执行调用指令,则这 种调用称作子程序的嵌套。子程序的嵌套深度最多为8级。 (3)当一个子程序被调用时,系统自动保存当前的堆栈数据, 并把栈顶置1,堆栈中的其他值为0,子程序占有控制权。子程序执行 结束,通过返回指令自动恢复原来的逻辑堆栈值,调用程序又重新取得 控制权。
例: 编写一个计算Y=(X+30)×4÷5的子程序,使该公式能在多处调 用。其中X、Y的数据类型为整数。
ห้องสมุดไป่ตู้子程序
主程序
用跳转指令来编写设备的手动与自动控制切换程序是一种常用的编 程方式。 例: 用跳转指令编程,控制两只灯,分别接于Q0.0、Q0.1。控 制要求如下: (1)要求能实现自动与手动控制的切换,切换开关接于I0.0,若I0.0 为OFF则为手动操作,若I0.0为ON,则切换到自动运行; (2)手动控制时,能分别用一个开关控制它们的启停,两个灯的启 停开关分别为I0.1、I0.2; (3)自动运行时,两只灯能每隔1s交替闪亮。
(1) 子程序参数 子程序最多可以传递16个参数。参数在子程序的局部变量表中加以定 义。参数包含下列信息:变量名、变量类型和数据类型。 (a)变量名。变量名最多用23个字符表示,第一个字符不能是数 字。 (b)变量类型。变量类型是按变量对应数据的传递方向来划分的, 可以是传入子程序(IN)、传入和传出子程序(IN_OUT)、传出子程 序(OUT)和暂时变量(TEMP)等4种类型。
I/O分配如下: I0.0,上限位检测开关; I0.2,左限位检测开关; I0.1,下限位检测开关; I0.3,右限位检测开关;
I0.4,手动\自动切换, 当I0.4为OFF时手动控制,为ON时自动控制; I0.5,手动向上运行; I0.7,手动向左运行; I1.1,手动松开; I0.6,手动向下运行; I1.0,手动向右运行; I1.2,手动夹紧;
相关文档
最新文档