子程序指令

合集下载

汇编语言——子程序

汇编语言——子程序

6.2.2.2 RET指令 指令 【指令格式】RET 【功能】这是子程序返回指令,必须写在子程序的指令 序列之中。根据所在的子程序的类型不同,RET指令的功能 也分为两种情况: (1)如果RET所在子程序是NEAR类型,则从堆栈中出 栈一个字(当然,SP会加2),送给IP。 (2)如果RET所在子程序是FAR类型,则先从堆栈中出 栈一个字送到IP,再出栈一个字送到CS,栈顶指SP的值加4。
cr
PROC NEAR MOV AH,2 MOV DL,13 INT 21H MOV DL,10 INT 21H RET
cr ENDP main:MOV AX,dseg MOV DS,AX LEA DX,buf MOV AH,10 INT 21H CALL cr MOV AH,1 INT 21H MOV BL,AL ;输入一个字符 ;用BL保存读入的字符 ;输入一个符号串
【解】程序段(a)中,先把AX赋值为102H,再把BX赋 值为304H,然后用ADD指令把两数相加,和为406H,结果 放在ADD指令的目的操作数AX中。 程序段(b)的前两行与(a)完全相同,AX取值102H,BX 取值304H,但在相加之前调用了子程序cr。从例6.3中cr的 具体实现方法可以知道,调用过程中寄存器AH的值被改为 2,因为INT 21H输出功能,使AL的值也被修改,变成0AH, 并且这个值一直保持到调用结束,于是“CALL cr”指令调 用子程序后,AX的值不再是调用前的102H,而变成了 20AH,当ADD指令进行两个寄存器相加时,结果是50EH, 并放到目的操作数AX中。
6.3 应用子程序进行编程
6.3.1 子程序实例
【例6.3】分析下列程序,描述它的功能。 dseg SEGMENT buf DB 80,81 DUP(0) dseg ENDS sseg SEGMENT STACK DW 64 DUP(0) sseg ENDS cseg SEGMENT ASSUME CS:cseg,DS:dseg,SS:sseg

子程序的调用和返回指令

子程序的调用和返回指令

1、子程序的调用和返回指令子程序的调用和返回是一对互逆操作,也是一种特殊的转移操作。

一方面,之所以说是转移,是因为当调用一个子程序时,程序的执行顺序被改变,CPU将转而执行子程序中的指令序列,在这方面,调用子程序的操作含有转移指令的功能,子程序的返回指令的转移特性与此类似;另一方面,转移指令是一种“一去不复返”的操作,而当子程序完后,还要求CPU能转而执行调用指令之下的指令,它是一种“有去有回”的操作。

为了满足子程序调用和返回操作的特殊性,在指令系统中设置了相应的特定指令。

1、1调用指令(CALL)调用子程序指令的格式如下:CALL 子程序名/Reg/Mem子程序的调用指令分为近(near)调用和远(far)调用。

如果被调用子程序的属性是近的,那么,CALL指令将产生一个近调用,它把该指令之后地址的偏移量(用一个字来表示的)压栈,把被调用子程序入口地址的偏移量送给指令指针寄存器IP即可实现执行程序的转移如果被调用子程序的属性是远的,那么,CALL指令将产生一个远调用。

这时,调用指令不仅要把该指令之后地址的偏移量压进栈,而且也要把段寄存器CS的值压进栈。

在此之后,再把被调用子程序入口地址的偏移量和段值分别送给IP和CS,这样完成了子程序的远调用操作00405600 call 0040689500405604 ......子程序调用指令本身的执行不影响任何标志位,但子程序体中指令的执行会改变标志位,所以,如果希望子程序的执行不能改变调用指令前后的标志位,那么,就要在子程序的开始处保护标志位,在子程序的返回前恢复标志位。

例如:CALL DISPLAY;DISPLAY是子程序名CALL BX;BX的内容是子程序的偏移量CALL WORD1;WORD1是内存字变量,其值是子程序的偏移量CALL DWORD1;DWORD1是双字变量,其值是子程序的偏移量和段值CALL word ptr [BX];BX所指内存字单元的值是子程序的偏移量CALL dword ptr [BX];BX所指内存双字单元的值是子程序的偏移量和段值1、2返回指令(RET)当子程序执行完时,需要返回到调用它的程序之中。

子程序调用和返回指令

子程序调用和返回指令
项目七: PLC功能指令应用
FX2系列可 编程控制器 有10条程序 流向控制类 指令
CJ(条件跳转) CALL(子程序调用) SRET(子程序返回) IRET(中断返回)
EI、DI(中断允许与中断禁止)
FEND(主程序结束) WDT(监控定时器刷新)
FOR、NEXT(循环开始和循环结束)
子程序调用和返回指令
项目七: PLC功能指令应用
指令名称
助记符
指令代码位数
子程序调用 子程序返回
CALL CALL(P

SRET
FNC01 (16)
FNC02
操作数 D(•)
P0~P62 嵌套5级

程序步
3步 标号P 1步 1步
指令格式
项目七: PLC功能指令应用
1.指令编号及助记符
(1)子程序调用功能指令FNC01 CALL ,CALL(P);
子程序标号范围为P0~P62,这些标号与条件转 移中所用的标号相同,而且在条件转移中已经使 用了标号,子程序也不能再用
同一标号只能使用一次,而不同的CALL指令可以多 次调用同一标程序
标号
子程序
图7.20 CALL指令举例
2.子程序嵌套
项目七: PLC功能指令应用
(2)子程序返回功能指令 FNC02 SRET;
指令 格式
2.指令的目标操作元件是指 针号P0~P62(允许变址修改)
项目七: PLC功能指令应用
指令用法
1.子程序 与标号的
位置
CALL指令必须和FEND,SRET一起使用
子程序标号要写在主程序结束指令FEND之后
标号P0和子程序返回指令SRET间的程序构成了P0子 程序的内容 当主程序带有多个子程序时,子程序要依次放在主 程序结束指令FEND之后,并用不同的标号相区别

发那科加工中心子程序调用编程序例子

发那科加工中心子程序调用编程序例子

发那科加工中心子程序调用编程序例子发那科加工中心是一种高效、精确的机械加工设备,可以广泛应用于各种制造业领域。

其中,子程序调用编程序是发那科加工中心中重要的功能之一。

子程序调用编程是一种编写程序的方法,通过在主程序中调用子程序,可以实现复用代码、提高程序的灵活性和可读性。

在发那科加工中心上,子程序调用编程可以帮助操作员实现更加高效的加工操作。

下面是一个示例,展示了如何在发那科加工中心上使用子程序调用编程:```主程序:N10 G90 G54 G00 X0 Y0 ; 初始化设置N20 M06 T1 ; 载入刀具N30 G43 H01 Z50 ; 刀具长度补偿N40 G97 S2000 ; 设定主轴转速N50 M03 ; 主轴转向N60 G01 Z-10 F100 ; Z轴下降N70 G01 X10 Y10 F200 ; XY轴移动N80 M98 P100 L10 ; 调用子程序子程序:O100 ; 子程序起始位置N10 G01 Z-20 F150 ; Z轴下降N20 G01 X20 Y20 F300 ; XY轴移动N30 G01 X30 Y30 F300 ; XY轴移动N40 G01 X40 Y40 F300 ; XY轴移动N50 G01 Z-10 F150 ; Z轴抬升N60 M99 ; 子程序结束```在上述示例中,主程序首先进行了一系列的初始化设置,然后载入刀具,并进行刀具长度补偿、设定主轴转速和转向。

接下来,主程序通过G01指令实现Z轴下降和XY轴移动。

最后,通过调用子程序的M98指令,执行子程序中的代码。

子程序中的代码根据实际需求进行编写。

示例中的子程序从O100位置开始,通过G01指令实现Z轴下降和XY轴移动。

最后,通过M99指令结束子程序。

通过使用子程序调用编程,操作员可以将重复性的加工操作封装在子程序中,通过简单的调用实现复用。

这样可以大大提高编程效率,减少出错的可能性,并且使程序更加易读易懂。

数控铣常用指令之子程序

数控铣常用指令之子程序

子程序 O0002; G91 G00 Z-95.0; G41 X40.0 Y20.0 D01; G01 Z-15.0 F100.0; Y30.0; X-10.0; X10.0 Y30.0; X40.0; X10.0 Y-30.0; X-10.0; Y-20.0; X-50.0; Z110.0; G40 X-30.0 Y-30.0 M99;
y
R 10
30
60
X 30
40
谢谢!

例如:M98P1002:; 调用1002号子程序,重复1次。
例一:如图所示,加工两个相同的工件,试编写
其加工程序。Z轴开始点为工件上方100mm处,切
深10mm。
Y D E
50
C N
B A M
G H
F
2
X O 50 10 0 15 0



1、编写子程序时,一般采用增量方式编程,这样可减少 计算量。 2、主程序中的模态指令可被子程序中同一组的其它G代 码所更改。如子程序用了G91代码后,在返回主程序时将 继续以G91方式进行,故应特别注意代码的转换,否则可 能产生位置错误。 3、调用程序时使用刀补,最好不要在刀具补偿状态下的 主程序中调用子程序,换句话说,刀补的建立和取消应在 子程序中进行。如果必须在主程序中建立,则应在主程序 中消除。决不能在主程序中建立,在子程序中消除,也不 能在子程序中建立,在主程序中消除,否则极易出错。 4、子程序不能单独运行。
M98
儿子
M99

子程序:
一次装夹加工多个相同零件或一个零件有重复加工部分的情况下 可使用子程序。
说明:子程序不是NC系统的标准功能,不同的NC系统所用的指令和格式均 不相同。

Assembly语言的基本指令与应用

Assembly语言的基本指令与应用

Assembly语言的基本指令与应用Assembly语言是一种低级程序设计语言,它是由机器指令和符号指令组成的。

相较高级语言,如C、Python等,Assembly语言更接近计算机硬件,使程序员能够直接操作寄存器、内存等底层资源。

在本文中,我们将探讨Assembly语言的基本指令以及其应用。

一、数据传输指令数据传输指令用于在寄存器和内存之间传输数据。

其中,MOV指令是最基本的数据传输指令,可以将数据从一个位置复制到另一个位置。

例如,MOV AX, BX指令可以将寄存器BX中的数据复制到AX寄存器中。

二、算术指令算术指令用于数值计算。

例如,ADD指令可以实现两个寄存器中的数值相加,并将结果保存在目标寄存器中。

SUB指令则可实现两个寄存器中的数值相减。

除此之外,还有MUL指令用于实现乘法,DIV指令用于实现除法等。

三、逻辑指令逻辑指令用于逻辑运算,例如AND、OR、NOT等。

AND指令可实现两个寄存器中的位与运算。

OR指令实现两个寄存器中的位或运算。

NOT指令则可对寄存器中的数据按位取反。

四、条件分支指令条件分支指令用于根据条件执行不同的操作。

例如,JMP指令可根据条件跳转到指定的地址。

JE指令用于判断两个数是否相等,并根据结果执行相应的操作。

五、循环指令循环指令用于实现循环结构。

例如,LOOP指令可根据条件循环执行一系列指令。

比如,可以使用LOOP指令实现对数组中的每个元素进行遍历和处理。

六、子程序指令子程序指令用于实现代码的模块化和重用。

例如,CALL指令可调用一个子程序。

RET指令用于从子程序中返回,并继续执行主程序的代码。

除了以上基本指令外,Assembly语言还有丰富的指令集供程序员使用,如字符串处理指令、输入输出指令等。

通过灵活运用这些指令,程序员可以编写出高效、底层的程序。

值得一提的是,Assembly语言虽然功能强大,但也存在一些局限性。

首先,它是与特定硬件平台相关的,因此编写的程序通常不能跨平台执行。

子程序的调用和返回指令

子程序的调用和返回指令

子程序的调用和返回指令
子程序是指在一个程序中定义的可以被其他程序调用的一段代码。

通过使用子程序,
程序员可以将重复的代码封装起来,减少代码的复制粘贴,提高代码的复用率和可维护性。

在编程语言中,子程序也被称为函数、过程或方法。

子程序的调用指令和返回指令是用于在程序中调用和退出子程序的指令。

在大多数编
程语言中,这些指令可以通过程序的控制流语句实现,在汇编语言中,这些指令是由特定
的汇编语句生成的机器指令。

子程序的调用指令通常包括以下步骤:
1. 保存当前程序计数器(PC)的值,以便返回时恢复执行点。

3. 将栈指针向下移动一定的偏移量,为子程序分配新的栈空间。

4. 将传入子程序的参数压入栈中,以便被子程序使用。

1. 弹出子程序的返回值,如果有的话。

4. 使用跳转指令将程序计数器更新为保存的返回地址,以便返回到调用者的程序
流。

子程序的调用和返回指令是编程中常用的技巧,可以优化程序的结构和代码重用。


高级编程语言中,编译器通常会自动为程序员处理子程序的调用和返回指令。

然而,在底
层编程和系统级编程中,程序员需要手动处理这些指令,以便更好地控制程序的执行流和
资源管理。

sinumerik数控编程指令高级讲解

sinumerik数控编程指令高级讲解

sinumerik数控编程指令高级讲解Sinumerik是西门子公司的数控系统,广泛应用于各类数控机床。

在数控编程中,掌握高级编程指令能够有效提高编程效率和加工精度。

本文将对Sinumerik数控编程中的高级指令进行详细讲解,帮助读者深入理解和运用这些指令。

一、循环指令1.MOD:模数循环指令,用于实现固定循环的多次执行。

语法:MOD [循环次数]示例:MOD 5含义:执行5次固定循环。

2.WHILE-ENDWH:条件循环指令,根据指定条件重复执行循环体内的指令。

语法:WHILE 条件...ENDWH示例:WHILE [I] <= 10...ENDWH含义:当变量I的值小于等于10时,重复执行循环体内的指令。

二、数组指令1.DIM:定义数组指令,用于定义一个数组。

语法:DIM [数组名]([维数])示例:DIM TABLE(10)含义:定义一个名为TABLE的一维数组,包含10个元素。

2.INDEX:数组索引指令,用于访问数组元素。

语法:[数组名](INDEX)示例:TABLE(INDEX)含义:访问数组TABLE的当前元素。

三、子程序调用指令1.CALL:调用子程序指令,用于调用已定义的子程序。

语法:CALL [子程序名]示例:CALL SUB1含义:调用名为SUB1的子程序。

2.RETURN:子程序返回指令,用于从子程序返回到主程序。

语法:RETURN示例:RETURN含义:从当前子程序返回到主程序。

四、其他高级指令1.IF-THEN-ELSE-ENDIF:条件判断指令,根据条件执行不同路径的指令。

语法:IF 条件THEN...ELSE...ENDIF示例:IF [I] > 10 THEN...ELSE...ENDIF含义:如果变量I的值大于10,执行第一个路径的指令;否则,执行第二个路径的指令。

2.PAUSE:暂停指令,用于暂停程序的执行。

语法:PAUSE [时间]示例:PAUSE 5含义:暂停5秒。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

子程序调用
MCRO 指令参数区域
子程序编号 0001
输入
SBN~RET 间的子程 序程序执行处理


(同等)



子程序回送
输出
MCRO 指令 返数区域
同样按照 200~203CH→A600~A603CH、A604~ A607CH→400~403CH 传送
仅地址 不同
3-454
子程序指令
3-193 子程序进入 SBN(092)ʗ子程序回送 RET(093)
页码 3-448 3-452 3-455
3-457 3-462
3-447
子程序指令
3-191 子程序调用 SBS(091)
概要
输ೖ入ྗ0O/N
3-191
子程序调用 SBS(091)
调用指定编号的子程序,执行程序。
3
各 符号


4#4


/
N/:ɿ子α程ϒ序ϧ编ʔ号νϯ൪߸

4#4 O 常௨规ৗϓ程ϩ序άϥϜ %
常数
数据和 D 所指定的返数数据,可以进行与子程序区域程 序的数据传递。 由此,可以作为仅改变 1 个子程序区域程序的地址的多
数据寄存器 变址寄存器(直接) 变址寄存器(间接)

个回路分开使用。

将 S~S+3 CH 的数据复制到 A600~A603 CH(MCRO
序 指
指令用参数区域),调用指定编号的子程序。将 A600~
带参数的子程序调用。
3
各 符号


.$30

/
N/:ɿ子α程ϒ序ϧ编ʔ号νϯ൪߸

4
S4:ɿ参Ҿ数਺数σ据ʔ低λ位ԼCҐH 编$)号൪߸
%
D%:ɿ回ฦ信஋数σ据ʔ低λ位ԼCҐH 编$)号൪߸
执行条件/每次刷新指定
执行条件
ON 时每周期执行 上升沿1周期执行 下降沿1周期执行 每次刷新指定


子程序 1






ɾ 相反,执行子程序内的微分指令(DIFU、DIFD 指令),

在该输出为 ON 的状态下,下一次开始不调用同一子

程序的情况下,微分指令(DIFU、DIFD 指令)的输
出保持 ON,而不发生 OFF,请注意。
ɾ 在下述示例中,0.00 为 ON 时执行子程序 0001,0.01
执行顺序
0.00 为 ON 时,执行子程序编号 1 的子程序程序, 0.01 为 ON 时,执行子程序编号 2 的子程序程序后,返回 SBS2 指令的下一指令。执行 SBN2 的前一指令后,返回 SBS1 的下一 指令。执行 SBN1 的前一指令后结束。
执行顺序
3-450
动作说明
(例)
常规程序 区域
定义时为 ON ɾ除此之外为 OFF
在子程序内使用输出微分型指令(DIFU、DIFD、带动
作选项@、%指令)时,请注意以下事项。
3
ɾ 在同一周期内,多次执行同一子程序时,子程序内的

输出微分型指令(DIFU、DIFD、带动作选项@、% 指令)动作不固定,请注意。
指 令 说
ɾ 在下述示例中,输出继电器 0.00 为 ON 时执行子程
由 OFF 转成 ON 时,DIFU 指令使 100.00 转成 ON。
如果在之后的周期中,0.00 保持 OFF 不变,子程序
0001 不执行时,DIFU 指令的输出 100.00 保持 ON
状态。
下 1 周期之后 不执行子程序
3-449
子程序指令
子程序调用 SBS(091)
动作说明
3
有两个子程序调用指令时
3-452
子程序指令
宏 MCRO(099)
状态标志的动作
名称 出错标志
标签 ER
内容
ɾ嵌套数超过 16 层时为 ON ɾ不存在指定目的地的子程序时为 ON ɾ从自子程序中调用自子程序时为 ON ɾ调用执行中的子程序时为 ON ɾ 指定目的地的子程序没有在自任务内加以
定义时为 ON ɾ除此之外为 OFF
ೖ输ྗ入0/ON
4#4
3&5 4#/
N
#
嵌ωε套ς2Ο层ϯ时ά ஈͷ৔߹
子αϒ程ϧ序ʔ程νϯ序
#
mϓϩάϥϜ
N
O
常௨ৗ规ϓ程ϩ序άϥϜ
#

#



4#/

O
子αϒ程ϧ序ʔνϯ (ϓϩSBάNϥ~ϜRET)
"
"
ʢ4#/ʙ3&5ʣ
3&5 &/%
程ϓ序ϩ结ά束ϥϜऴྃ
执行条件/每次刷新指定
参考
相同动作模式ɾ 结构下,存在仅地址不同的多个回路时,
如果使用该 MCRO(宏)指令,可以将这些多个回路汇 3
总到多个 MCRO 指令和 1 个回路。该宏指令是子程序

的一种。在执行 MCRO(宏)指令时,将子程序编号所 指定的子程序变更为指定的输入输出编号后执行。
但是,能够通过 MCRO(宏)指令汇总的回路必须为仅
中断任务程 序区域
可以
数据内容
ྫʣ
4#/
4#4
3&5
ʙ ʙ ʙ ʙ
ʙ
4#/
4#4
3&5
4#/
3&5
区域 CIO(输入输出继电器等)
内部辅助继电器 保持继电器 特殊辅助继电器 定时器 计数器 数据存储器 DM 间接(BIN) DM 间接(BCD) 常数 数据寄存器 变址寄存器(直接) 变址寄存器(间接)
使用限制
区域
块程序 区域
使用
可以
工序步进 程序区域
可以
子程序区域 可以
MCRO @MCRO
无 无
中断任务 程序区域
可以
操作数说明
数据内容
N:0~255(10 进制)
区域
N
S
D
CIO(输入输出继电器等)

0000~6140
组合使用指令
内部辅助继电器

W000~508
SBN(子程序进入)指令以及 RET(子程序回送)指令

A603 CH 的数据作为输出数据,执行将 A604~A607
- - - 0~255 (10 进制)
ʵ
D00000~32764 @D00000~32767 *D00000~32767
ʵ
ʕ ʕ
,IR0~15 -2048~+2047,IR0~15
DR0~15,IR0~15 ,IR0~15+(++)



使用限制

区域 块程序 区域
工序步进 程序区域
子程序区域 中断任务 程序区域
说 明
SBN 不可以
不可以
不可以
可以
RET 不可以
不可以
可以
可以
操作数说明
N:0~255(10 进制)
组合使用指令
ɾ RET(子程序回送)指令 ɾ SBS(子程序调用)指令或 MCRO(宏)指令
功能说明
显示子程序区域的开始。 最初的 SBN 指令以后为子程序区域,子程序区域只能通 过 SBS 指令或 MCRO 指令执行。
必须在同一任务内。如果不在同一任务内,会发生错误,
ER 标志为 ON。
ɾ 即使执行子程序指令,在下列情况下,ER 标志为 ON, 实际上不进行调用。
1)指定目的地的子程序未在自任务内加以定义。
2)从自子程序中调用自子程序时
3)子程序的嵌套超过 16 层时 4)指定子程序在执行过程中时 ɾ 通过 IL-ILC 指令进行互锁的过程中,SBS 指令进入 NOP 处理。
注:
ɾ 在通过 MCRO 指令调用的子程序中,必须在输出地址中
使用参数区域(A600~A603 CH)的 4 CH 数据(通道、
位等),在输出地址中使用返数区域(A604~A607 CH)

的 4CH 数据(通道、位等)。该 4 CH 以上的数据不能 传递,请注意。
程 序 指
ɾ MCRO 指令可以嵌套。但是,参数区域(A600~A603
N ʕ
ʕ ʕ ʕ ʕ ʕ ʕ ʕ ʕ 0~255(10 进制) ʕ ʕ ʕ
3-448
子程序指令
子程序调用 SBS(091)
状态标志的动作
请注意
名称 出错标志
注:
标签 ER
内容
ɾ嵌套数超过 16 层时为 ON ɾ不存在指定目的地的子程序时为 ON ɾ从自子程序中调用自子程序时为 ON ɾ调用执行中的子程序时为 ON ɾ 指定目的地的子程序没有在自任务内加以
SBN 指令
3-193
子程序进入 SBN(092)/子程序回送 RET(093)
概要
显示指定编号的子程序开始。 在 RET 指令和设置中使用,定义子程序区域。
符号
4#/ /

N/:ɿ子αϒ程ϧ序ʔ编ν号ϯ൪߸
执行条件/每次刷新指定
执行条件 常时 ON 输出每周期执行
SBN RET
3
每次刷新指定


序 0001,输出继电器 0.01 由 OFF 转成 ON 时,DIFU
指令使 100.00 转成 ON。但是,在同一周期内输出继
ɾ 可以多次调用同一子程序。
电器 0.01 为 ON 时,由于再次执行子程序 0001,本
ɾ 该子程序调用(SBS)指令和子程序进入(SBN)指令
次不检测 DIFU 指令的 0.01 上升,100.00 转成 OFF。
相关文档
最新文档