子程序的调用

合集下载

子程序调用指令【精选】

子程序调用指令【精选】

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

主程序调用子程序时使用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指令执行的操作可以看出,第一步是把子程序返回调用程序的地址保存在堆栈中。

8.4.2 子程序指令及使用_零起步轻松学欧姆龙PLC技术_[共4页]

8.4.2 子程序指令及使用_零起步轻松学欧姆龙PLC技术_[共4页]

零起步轻松学欧姆龙PLC技术
304
电工技术系列
图8-16 两种程序结构
8.4.2 子程序指令及使用
1.子程序调用(SBS)、子程序进入(SBN)和子程序返回(RET)指令 (1)指令说明
指令说明如下:
指令名称、格式与符号功能说明操作数N
子程序调用
SBS N
调用编号为N的子程序。

在子程序中再调用其他的子程序称为嵌套,子程序调
用指令的嵌套最多为16层
0~255
(十进制)
子程序进入
SBN N
开始编号为N的子程序
0~255
(十进制)
子程序返回
RET 子程序结束,并返回调用指令的下一条指令无操作数
(2)使用举例
子程序调用(SBS)、子程序进入(SBN)和子程序返回(RET)指令使用如图8-17所示。

不带嵌套的子程序调用如图8-17(a)所示,该程序分作常规程序区域和子程序区域,在常规程序区域中有A、B、C三段程序和两个子程序调用指令,在子程序区域有编号分别为1、2的两个子程序,每个子程序都以SBN指令开始,以RET指令结束。

在程序运行时,当执行完A段程序时,如果0.00常开触点处于断开,“SBS 1”指令不执行,会执行B段程序,B段程序执行完后,如果0.01常开触点处于断开,则执行C段程序,C段程序执行完后,跳过子程序区。

子程序的调用

子程序的调用

格式二 M98 P××××××××; 例3 M98 P50010; 例4 M98 P510; 地址P后面的八位数字中,前四位表示调用次数, 后四位表示子程序号,采用这种调用格式时,调用 次数前的0可以省略不写,但子程序号前的0不可省 略。如例3表示调用O10子程序5次,而例4则表示调 用O510子程序1次。
三、子程序调用编程实例
例1 试用子程序方式编写如图所示软管接头工件右 端楔槽的加工程序。
1.选择加工用刀具
粗加工右端轮廓时,采用60°V型刀片右偏刀(图 a)进行加工;加工右端内凹接头轮廓时,采用55°菱 形刀片左偏刀(图b)进行加工。此外,当进行批量加 工时,还可采用特制的成形刀具(图c)加工。
(2)自动返回到程序开始段 如果在主程序中执行M99,则程序将返回到主程 序的开始程序段并继续执行主程序。也可以在主程序 中插入M99 Pn;用于返回到指定的程序段。为了能 够执行后面的程序,通常在该指令前加“/”,以便在 不需要返回执行时,跳过该程序段。
(3)强制改变子程序重复执行的次数 用M99 L××指令可强制改变子程序重复执行的 次数,其中L××表示子程序调用的次数。例如,如 果主程序用M98 P××L99,而子程序采用M99 L2返 回,则子程序重复执行的次数为2次。
O2;(SUB) ……; M99;
在有些系统中如出现该种刀尖圆弧半径补偿被分隔
指令的程序,在:
O1;(MAIN) O2;(SUB)
G91……;
G41……;
……;
……;
M98P2;
G40……;
M30;
M99;
子程序的执行过程如下:
O0402; N10 ……; N20 M98 P0100; N30 ……; …… N60 M98 P0200 L2; …… N100 M30;

子程序的调用原理

子程序的调用原理

子程序的调用原理
子程序是一个独立的代码块,可以被其他程序调用。

在程序中调用子程序可以提高代码的可读性和可维护性。

子程序的调用原理通常是通过栈来实现的。

当程序调用子程序时,会将当前程序执行的位置(即返回地址)压入栈中,并将程序控制转移到子程序的第一行代码。

子程序执行完毕后,会将返回地址从栈中弹出,并跳转到该地址继续执行原来的程序。

在子程序的执行过程中,可能会使用到一些参数。

这些参数可以通过栈或者寄存器来传递。

在调用子程序时,将参数压入栈中,子程序在执行时从栈中弹出参数并使用。

总之,子程序的调用原理是通过栈来实现的,包括将返回地址和参数压入栈中,以及在子程序执行完毕后从栈中弹出返回地址并跳转到该地址继续执行程序。

第十一节 子程序的调用

第十一节 子程序的调用

主程序与子程序间的参数传递 主程序与子程序相互传递的信息称为参数。 主程序与子程序相互传递的信息称为参数。主程序提供给 子程序以便加工处理的信息称为入口参数, 子程序以便加工处理的信息称为入口参数,经子程序加工 处理后回送给主程序的信息称为出口参数。 处理后回送给主程序的信息称为出口参数。在调用子程序 主程序应事先把入口参数放到某些约定的位置。 时,主程序应事先把入口参数放到某些约定的位置。子程 序在运行时,可以从约定的位置得到有关的参数。同样, 序在运行时,可以从约定的位置得到有关的参数。同样, 子程序在运行结束前,也应把出口参数送到约定位置。 子程序在运行结束前,也应把出口参数送到约定位置。在 返回主程序后,主程序可以从这些地方得到需要的结果。 返回主程序后,主程序可以从这些地方得到需要的结果。
第十节 子程序的调用
子程序的概念
• 子程序是一种重要的程序结构。 在实用中, 子程序是一种重要的程序结构 。 在实用中 , 常会遇到需要反复多次执行同一程序段的情 为了减少重复编写的工作量, 形 。 为了减少重复编写的工作量 , 并减少程 序存储空间, 常常把功能完整、 序存储空间 , 常常把功能完整 、 意义明确并 次使用的程序段从原来的程序( 被多次使用的程序段从原来的程序(称为主程 中分离出来独立编写,就成为子程序, 序)中分离出来独立编写,就成为子程序,从 而主程序可根据需要多次调用子程序。 而主程序可根据需要多次调用子程序。
子程序调用与堆栈的关系
• 为了能够成功地调用子程序,主程序应能在需要时通过调用指 为了能够成功地调用子程序, 令自动转入子程序, 令自动转入子程序,子程序完成后应能够通过末尾的返回指令 自动返回调用指令下一条指令地址(称为断点地址 处继续执行。 称为断点地址)处继续执行 自动返回调用指令下一条指令地址 称为断点地址 处继续执行。 • 因此,调用指令不仅要将子程序入口地址送到程序计数器 , 因此,调用指令不仅要将子程序入口地址送到程序计数器PC, 还要将断点地址存入堆栈保护起来。 以便实现程序转移,还要将断点地址存入堆栈保护起来。返回 指令则要将断点地址从堆栈中取出送给PC, 指令则要将断点地址从堆栈中取出送给 ,以便返回断点处继 续执行主程序。 续执行主程序。

子程序调用和返回指令

子程序调用和返回指令
项目七: 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之后,并用不同的标号相区别

加工中心主程序调用多个子程序的方法

加工中心主程序调用多个子程序的方法

加工中心是一种高精度、高效率的数控机床,其主要作用是对工件进行加工。

在加工中心的操作过程中,通常会涉及到多个子程序的调用。

如何合理地调用多个子程序,可以有效提高加工效率,保证加工质量,本文将从以下几个方面介绍加工中心主程序调用多个子程序的方法:一、了解加工中心主程序的结构加工中心主程序通常采用G代码和M代码进行编程。

G代码用于控制加工中心的运动轨迹和加工轨迹,M代码用于控制加工中心的辅助功能,如刀具切换、冷却液开关等。

在编写加工中心主程序时,需要充分了解加工中心的结构和工作原理,明确每个子程序的功能和调用顺序。

二、合理规划加工过程中的子程序在加工中心的加工过程中,通常会涉及到多个子程序,如加工轨迹生成、刀具切换、冷却液控制等。

在编写加工中心主程序时,需要对加工过程进行合理规划,明确每个子程序的功能和调用顺序,确保加工过程顺利进行。

三、采用模块化编程思想在编写加工中心主程序时,可以采用模块化编程思想,将不同功能的子程序分解成多个模块,每个模块负责完成相应的功能。

通过模块化编程,可以有效提高代码的复用性和可维护性,简化主程序的编写和调试过程。

四、合理使用宏指令和循环结构在加工中心主程序中,可以合理使用宏指令和循环结构,简化代码的编写和提高代码的可读性。

宏指令可以将一系列操作封装成一个整体,通过简单的调用即可完成复杂的操作;循环结构可以简化重复操作的编写,提高代码的复用性和可维护性。

五、加强调试和测试工作在编写加工中心主程序时,需要加强调试和测试工作,确保主程序和子程序之间的调用顺利进行。

可以通过模拟加工、单步调试等方式对主程序和子程序进行验证,及时发现和解决问题,保证加工过程的顺利进行。

通过以上几点方法的合理运用,可以有效提高加工中心主程序调用多个子程序的效率和质量,确保加工过程的顺利进行。

希望本文对加工中心主程序调用多个子程序的方法有所帮助。

一、优化主程序结构加工中心的主程序结构通常需要按照加工过程的逻辑顺序来组织。

西门子PLC调用子程序的方法

西门子PLC调用子程序的方法

调用西门子plc的子例行程序(CALL)指令将控制转换给子例行程序(SBR_n)。

您可以使用带参数或不带参数的“调用子例行程序”指令。

在子例行程序完成执行后,控制返回至“调用子例行程序”之后的指令。

每个子例行程序调用的输入/输出参数最大限制为16。

如果您尝试下载的西门子plc程序超过此一限制,会返回一则错误讯息。

如果您为子例行程序指定一个符号名,例如USR_NAME,该符号名会出现在指令树的“子例行程序”文件夹中。

1. 参数值指定给局部内存的顺序由CALL 指定,参数从L.0开始。

2.一至八个连续位参数值被指定给从Lx.0开始持续至Lx.7的单字节。

3.字节、字和双字数值被指定给局部内存,位于字节边界(LBx、LWx或LDx)位置。

在带参数的“调用子例行程序”指令中,表中定义的变量完全匹配。

参数顺序必须以输入参数开始,其次是输入/输出参数,然后是输出参数。

为带安数 =0调用设置ENO的错误条件: 0008 超出最大子例行程序嵌套。

注释:位于指令树中的子例行程序名称的工具提示显示每个参数的名称。

艾驰商城是国内最专业的MRO工业品网购平台,正品现货、优势价格、迅捷配送,是一站式采购的工业品商城!具有10年工业用品电子商务领域研究,以强大的信息通道建设的优势,以及依托线下贸易交易市场在工业用品行业上游供应链的整合能力,为广大的用户提供了传感器、图尔克传感器、变频器、断路器、继电器、PLC、工控机、仪器仪表、气缸、五金工具、伺服电机、劳保用品等一系列自动化的工控产品。

如需进一步了解相关PLC产品的选型,报价,采购,参数,图片,批发等信息,请关注艾驰商城。

/。

新代m98调用子程序实例说明

新代m98调用子程序实例说明

新代m98调用子程序实例说明新代M98调用子程序实例说明在新代M98中,调用子程序是一种常见和重要的操作。

子程序是一段独立的代码,可在主程序中多次调用,提高了代码的复用性和可维护性。

下面我们将通过一个实例来说明如何在新代M98中进行子程序的调用。

假设我们有一个主程序,需要进行一个复杂的计算操作,并且该计算操作需要在不同的地方多次使用。

为了简化代码和提高效率,我们可以将该复杂计算操作封装在一个子程序中,并在需要的地方调用该子程序。

首先,我们需要定义一个子程序,并给它一个名称,例如"calculation"。

在定义子程序时,我们可以指定输入参数和返回值。

输入参数是在调用子程序时传递给子程序的数据,而返回值则是子程序执行完后返回给调用程序的结果。

接下来,我们可以在需要调用子程序的地方使用"CALL"命令来调用子程序。

例如,我们可以在主程序中的某个位置写下"CALL calculation",这样程序就会跳转到子程序的开始处执行子程序中的代码。

当程序跳转到子程序后,子程序会执行一系列的计算操作,并根据需要使用输入参数来进行计算。

子程序可以使用新代M98提供的各种指令和功能,如数学运算、逻辑运算、读取输入端口等。

在子程序执行完毕后,程序会回到调用子程序的地方,同时返回一个结果给调用程序。

该结果可以是一个数值、一个状态、或者是任何我们在定义子程序时指定的返回值。

需要注意的是,调用子程序时会暂时停止主程序的执行,并将控制权交给子程序。

因此,在设计程序时,我们需要合理安排子程序的调用位置,以及在子程序中进行必要的数据传递和操作。

总之,通过新代M98调用子程序可以有效地提高程序的模块化和可重用性。

通过将复杂的计算操作封装在子程序中,并在需要的地方调用该子程序,我们可以简化代码、提高效率,并优化程序的开发和维护过程。

如有任何疑问,请随时向我提问。

机器人现场编程12.调用子程序

机器人现场编程12.调用子程序

确认删除
此界面可开始调用子程序
调用子程序
10)子程序的调用句法为“名称()”,利用示教 器虚拟键盘,按程序顺序输入子程序的名称和括号。
注:此处要调用的子程序为“BiaoPaiZhuaQu” 为实训内容“4-3-13 标牌抓爪编程”中编写的 程序,“WaiBuTCPprog”为实训内容“4-2-11 以外部TCP的轨迹轮廓编程”中编写的程序, “BiaoPaiFangXia”为实训内容“4-3-13 标牌 抓爪编程”中编写的程序。
调用子程序
对子程序调用编程
机器人主程序对子程序调用的定义:
就是在机器人执行完第一个子程序后,返回到主程序
继续执行其他子程序,直到执行完所有子程序的一个过程。
本次实训内容简要描述:
1.由“操作人员”模式切换成“专家”模式。
2.创建模块程序“MainProg”作为机器人主程序。
调用子程序句法
3.将先前已编辑好的程序(如“BiaoPaiZhuaQu”等)作为子程序供主程序调
用。
4.调用子程序句法:名称()。
5.在运行方式T1、T2和自动运行方式下测试程序
调用子程序
机器人主程序对子程序的调用操作步骤
1)先进入主菜单,依次选择“配置”、“用户组”。 2)然后进入模式选择界面,界面上显示当前使用的用户组和其他用户组。
进入主菜单,选择所需要的项目
进入模式选择界面
调用子程序
新建程序模块
进入程序编辑界面
调用子程序 7)新建程序里都有两行默认HOME程序,由于要调用的机器人子程序 中包含有HOME程序指令行,所以,在机器人主程序中,HOME程序行 可删除,依次单击“编辑”、“删除”命令,即可完成删除操作。
删除主程序中HOME指令行

汇编语言第5章王爽版(子程序调用指令)

汇编语言第5章王爽版(子程序调用指令)
二、主程序与过程的参数传递方式
例5-1:分别用三种参数传递方法编写求1+2的和的程序。要求将结果送到内存单元,并显示。
DATA SEGMENT SUM DB 0 DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX MOV AL, 1 MOV BL, 2 CALL subprog mov ah,4cH int 21h CODE ENDS END START
5.2 子程序的定义、调用和返回(续)
子程序返回指令(RET)
RET [n] 功能:弹出CALL指令压入堆栈的返回地址 段内返回——偏移地址IP出栈 IP←SS:[SP], SP+2 段间返回——偏移地址IP和段地址CS出栈 IP←SS:[SP],SP←SP+2 CS←SS:[SP],SP←SP+2
子程序的概念
子程序的现场保护与参数传递**
子程序的嵌套与递归调用
子程序的定义、调用和返回 **
子程序设计 *
宏汇编程序设计
教学基本内容
第5章 结构化程序设计
子程序:在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 过程(子程序):是指功能相对独立的一段程序。 主程序和子程序间的关系:调用子程序的程序称为主调程序或主程序,被调用的程序称为子程序。
Spr PROC PUSH BP MOV BP, SP MOV AX, [BP+6] MOV BX, [BP+4] ADD AL, BL OR AL, 30H MOV DL,AL MOV AH,2 INT 21H MOV SUM, AL POP BP RET Spr ENDP

子程序的调用

子程序的调用

主程序流程图
开始
调用子程序DECBIN,从键盘 接受一个十进制并转化为对应的二进制 调用子程序CRLF实现回车换行 调用子程序BINHEX,把二进制数转换成 16进制并显示 调用子程序CRLF实现回车换行 Y 是否退出 N 接收下一次键盘输入 END
decbin PROC NEAR push ax push cx mov bx,0 mov si,0 Newchar: mov ah,1 int 21h cmp al,’*’ je ext1 sub al,30h jl ext2 cmp al,9 jg ext2 cbw xchg ax,bx mov cx,10 mul cx xchg ax,bx add ax,bx jmp newchar
子程序的定义
3.注意问题
1)过程体内必须有一条RET指令被执行 proc1 proc mov ax,0 proc1 endp proc2 proc mov bx,-1 ret proc endp
子程序的定义
2)调用程序和过程在同一程序段时,属性选择NEAR,当调 用程序和过程不在同一程序段时,应选择FAR 3)在调用时,NEAR 和FAR 可以强制改变 CALL FAR PTR NEARPROC CALL NEAR PTR FARPROC
参数的传递
1 参数传递: 当子程序被调用时,一般需要向子程序传递若干参数, 由子程序来对这些参数完成特定功能处理;当子程序 处理后,需要向调用它的主程序传递结果。这种主程 序和子程序之间的信息的传递称为参数的传递。
参数的传递
2 参数传递方法: 寄存器传递参数 存储器传递参数 地址表传递变量地址 堆栈传递参数
子过程的调用与返回指令
4.子程序调用方式举例
分析下面程序段,说明各种调用子程序的方法和寻址方式: data segment nproc dw nearp fproc dd farp data ends code1 segment assume cs:code1,cs:data Main proc far

新代调用子程序方法

新代调用子程序方法

新代调用子程序方法
宝子,你想知道新代系统里怎么调用子程序呀?这就像一场有趣的魔法操作呢!
在新代系统里,调用子程序其实没有那么难。

一般来说啊,你得先把你的子程序写好哦。

就像是准备好一个小锦囊妙计 。

这个子程序呢,要有它自己的功能,比如说可能是专门用来控制某个轴的精确运动,或者是执行某个特定的加工工序。

当你要调用这个子程序的时候呢,你得在主程序里给系统一个信号,就像是在喊:“小子程序,该你上场啦!”这个信号的设置呀,要按照新代系统规定的格式来哦。

比如说可能是一个特定的代码加上子程序的编号之类的。

我给你举个小例子哈,就好像你有一个做蛋糕的大程序(主程序),然后你有个专门打奶油的小程序(子程序)。

当你在做蛋糕做到需要打奶油的时候,你就在做蛋糕的步骤里(主程序里)写个指令,告诉系统:“我现在要打奶油啦,快去找那个打奶油的小程序来干活。


不过呢,这里面也有一些小细节要注意哦。

比如说你得确保你的子程序和主程序之间的数据传递是正确的。

要是数据传错了,就像是你本来要打奶油,结果却把面粉加进去了,那可就乱套啦 。

还有呀,在调试的时候,要仔细看看调用子程序的时候有没有什么奇怪的报错。

如果报错了,不要慌,就像你玩游戏遇到小怪兽一样,把它打败就好啦。

仔细检查一下是不是子程序的名字写错了,或者是调用的参数设置得不合理。

新代调用子程序就像是一场精心编排的小舞蹈 ,每个步骤都要准确无误。

你要是多练习几次,就会觉得超级简单,而且会发现这样可以让你的编程变得更加高效和有条理呢。

宝子,加油呀,相信你很快就能掌握这个小技能啦 。

s71200调用子程序实例

s71200调用子程序实例

s71200调用子程序实例
下面是一个S7-1200调用子程序的示例程序:```pascal
PROGRAM MainProgram
VAR
i: INT := 0;
END_VAR
VAR
result: INT := 0;
END_VAR
ROUTINE SubRoutine : INT;
VAR
j:INT := 0;
BEGIN
j := i * 2;
RETURN j;
END_ROUTINE
BEGIN
FOR i := 1 TO 10 DO
result := CALL SubRoutine();
// 在此处可以对result进行处理
END_FOR;
END_PROGRAM
```
在上面的示例中,程序主体部分定义了一个循环,循环中调用了一个名为SubRoutine的子程序。

子程序中有一个变量j,通过计算i的值的两倍将结果保存到j中,并使用RETURN语句返回j的值。

在主程序中,通过CALL语句调用子程序SubRoutine,并将返回值保存到result变量中。

可以在CALL语句后的注释中对result进行进一步处理。

请注意,这只是一个简单的示例,实际的子程序可能需要传递参数,进行更复杂的计算,并返回更复杂的结果。

子程序的调用

子程序的调用
子程序的调用
江苏省吴中中等专业学校 林丽
绝对坐标与增量坐标:



绝对坐标:所有坐标系的坐标值均从某 一固定坐标原点计量的坐标系。 增量坐标:运动轨迹的终点坐标是相对于 起点计量的坐标系。(举例说明) 绝对坐标和增量坐标可以在同一程序中 混合使用
子程序的定义

一个零件中有几处形状相同,或刀具运 动轨迹相同,为了缩短程序,可把重复 的程序段单独抽出,编成“子程序”, 存储在CNC系统内,反复调用。调用子 程序的程序称“主程序”。
子程序的嵌套
小结



1.编程时增量坐标和绝对坐标可以混合 使用。 2.子程序调用时要注意刀尖的位置。 3.子程序调用中有主程序和子程序,要 分别作为两个程序名存储在CNC系统内。 4.子程序可以嵌套。
思考题

1.如果遇上不等距槽怎么处理? 2.子程序除了可以在切槽的时候调用, 还能用在哪些地方?外圆的毛坯加工可 以吗?
子程序的格式
主程序 O7777; …… M98 P0777; …… M30; % 子程序 O0777; …… …… M99; %
子程序调用的注意点

1.一定要明确刀尖的位置。 2.前一个槽的末点下一个槽的起点。 3.子程序调用中有主程序和子程序,要 分别作为两个程序名存储在CNC系统内。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

mov ax,data mov ds,ax call nearp lea ax,nearp call ax call nproc lea bx,nproc call word ptr [bx]
call farp call fproc lea bx,fproc
Nearp proc near
…… ret Nearp endp Code1 ends end main code2 segment
3)在调用时,NEAR 和FAR 可以强制改变 CALL FAR PTR NEARPROC CALL NEAR PTR FARPROC
子过程的调用与返回指令
子过程的调用是个”有去有回”的过程,子程序执行
完后必须返回CALL指令的下一条指令处,因此必须对
CALL指令的下条指令的地址进行保存.保存地址的操作 是通过堆栈来完成.不是采用PUSH \POP指令来实现,而
通过存储器来传递参数
当调用程序和子程序处于同一文件中,可以直接访问 块内的变量或数据。 举例3:编写程序从键盘上输入一个字符串,存于变量为INPUT中, 要求以回车键作为输入过程的结束,字符结尾部分添加0。 (1) 分析: 子程序getstring直接从键盘输入字符串,入口参数:无。出 口参数:字符串变量INPUT 变量INPUT 属于通过存储器传递参数,调用程序和子程序处 于同一文件在数据段定义变量属于局部变量
Findmax proc
mov ax,[si] Lp1: cmp ax,[si+2] jg next xchg ax,[si+2] next: add si,2 loop lp1 ret findmax endp Code ends
end main
参数的传递
举例2 从键盘输入一个十进制数(0~65535),将它转换成 16进制输出. 分析
3.主程序中的寄存器信息内容的保存和恢复
主程序调用和返回时断点信息的保存和恢复 4.注意堆栈的使用.压入与弹出的内容必须对应.
子程序的编程原则
1.切分子程序 根据程序的功能、结构和重复使用的程序段等特性完成子 程序的切分。 1)显示一个字符的子程序 display proc push ax mov ah,2 int 21h pop ax ret displsy endp
入口参数:把子程序执行前准备的值或地址称为入口参 数。是调用者提供给子程序的信息。
出口参数:把子程序返回值或地址称为出口参数。是子
程序运行后,返回调用者的信息。 保存入口参数和出口参数的方法:利用堆栈或寄存器
子程序的编程原则
3.保存环境信息 子程序是可共享的,可被不同的程序调用.所以子程序中 用到的寄存器的内容要保存,在子程序退出前要恢复寄 存器中的内容. 4.堆栈平衡 堆栈使用主要在:保存转移指令的返回断点、保存子 程序中用到的寄存器的内容、参数传递和子程序本身 用到的堆栈操作。保存堆栈平衡确保数据弹出的准确 性,使程序正确执行。
是用CALL\RET指令隐含完成.
子过程的调用与返回指令
1.子程序的调用指令
指令格式: CALL DST DST 是子程序的子程序名或子程序的首地址.可以采用与转移指令 有关的四种转移的寻址方式之一,即:段内直接调用\段内间接调用\ 段间直接调用\段间间接调用. 段内、段间:调用程序和子程序在同一段内,为段内调 用;否则 段间调用; 直接、间接:DST为子程序名(子程序首地址),是转移 地址,该有效地址直接出现在CALL指中; 若有效地址出现在寄存器中间接得到,则为间 接调用
子程序的编程原则
在主程序中调用子程序 …… mov dl,’a’ call display mov dl,0dh call display …..
子程序的编程原则
2)通过键盘获取一个字符的子程序
inputchar proc push ax mov ah,1 int 21h mov char ,al pop ax ret intputchar endp
主程序流程图
开始
调用子程序DECBIN,从键盘 接受一个十进制并转化为对应的二进制 调用子程序CRLF实现回车换行 调用子程序BINHEX,把二进制数转换成 16进制并显示 调用子程序CRLF实现回车换行 Y 是否退出 N 接收下一次键盘输入 END
decbin PROC NEAR push ax push cx mov bx,0 mov si,0 Newchar: mov ah,1 int 21h cmp al,’*’ je ext1 sub al,30h jl ext2 cmp al,9 jg ext2 cbw xchg ax,bx mov cx,10 mul cx xchg ax,bx add ax,bx jmp newchar
子程序的调用
子程序的结构

子程序的定义 子程序的调用与返回指令 子程序的编程原则 参数的传递
子程序的定义
1.基本概念
功能相对独立的一段程序. 输入\输出\处理过程均可编写为相应的子程序. 使程序的模块化,便于代码复用、简化编程。
2.子程序的定义
过程定义伪指令 过程名 PROC [NEAR/FAR] ;过程的开始,FAR、NEAR 过程的属性 过程体 RET 过程名 ENDP ;过程结束
1)该程序定义三个子程序 子程序DECBIN 功能:从键盘输入的十进制数转换成二进制数放在 BX中 子程序CRLF完成回车换行的功能 子程序BINHEX功能:二进制转换成16进制. 2)该程序采用寄存器传送参数 3)在DECBIN子程序中,当键入”*”时,将寄存器SI设置1,然后退出 该子程序,继续执行其它子程序,最后判断SI的值是否为1,为1则结 束,否则执行循环.
参数的传递
2 参数传递方法: 寄存器传递参数 存储器传递参数 地址表传递变量地址 堆栈传递参数
参数的传递
寄存器传递参数
传递数据和地址。常用AL,AX,DX传递数据,SI,DI,BX传递地 址 用于入口参数较少的情况 举例:求带符号的字数组ARRAY的元素的最大值,元素的个数由变 量COUNT定义,最大值放在MAX 中 (1)分析: 定义一个查找最大值的子程序FINDMAX,通过主程序调用程序。 子程序的功能:将带符号的字数组 ARRAY 的首地址送寄存器SI。 元素的个数COUNT 送寄存器CX。 调用后,AX中结果送MAX中。
assume cs:code2
Farp proc far ….
call dword ptr [bx] mov ah,4ch int 21h Main endp
ret
Farp ends Code2 ends
子程序的编程原则
1.分析题意,进行模块分解,画出流程图.
2.对子程序做说明.说明内容:子程序名,功能,入口参数,出 口参数,执行时间等
xchg ax,bx add ax,bx jmp newchar Ext1: mov si,1 Ext2: pop cx pop ax ret Decbin endp
Binhex proc near push cx push dx mov ch,4 Lp: mov cl,4 rol bx,cl mov al,bl and al,0fh add al,30h cmp al,3ah jl print add al,7h print: mov dl,al mov ah,02h Int 21h dec ch jnz lp pop dx pop cx ret
4.子程序调用方式举例
分析下面程序段,说明各种调用子程序的方法和寻址方式: data segment nproc dw nearp fproc dd farp data ends code1 segment assume cs:code1,cs:data Main proc far


pop dx pop cx ret binhex endp
crlf proc near push dx mov dl.0dh mov ah,02 int 21h mov dl,0ah mov ah,02 int 21h pop dx ret Crlf endp
参数的传递
练习:
1.完成例题2的程序 2.从键盘输入一个十进制数(0~65535),将它转换成十进 制输出.
子过程的调用与返回指令
1)段内直接调用 SP=SP-2;SS:[SP] CALL下一条指令的IP IP =IP+D16 (DST为16位) 2)段内间接调用 SP=SP-2;SS:[SP] CALL下一条指令的IP IP =DST中的有效地址EA( DST为16位)
子过程的调用与返回指令
3)段间直接调用 SP=SP-2 ;SS:[SP] SP=SP-2; SS:[SP] IP=DST的偏移地址 CS=DST的段地址 4)段间间接调用 SP=SP-2 ;SS:[SP] SP=SP-2; SS:[SP] IP=EA的低16位 CS=EA的高16位
返回地址的段地址 返回地址的偏移值
返回地址的段地址 返回地址的偏移值
子过程Байду номын сангаас调用与返回指令
例题:判断下列CALL指令的寻址方式:
1)PRO1 为过程名,属性为NEAR CALL PRO1 2)PRO2 为过程名,属性为FAR CALL PRO2 3)设过程的偏移地址在BX中,则有指令: CALL BX 4)设过程的偏移地址在[BX]中,则有指令: CALL [BX]
子过程的调用与返回指令
3 .注意:
1)CALL 和RET均不影响标志
2)NEAR属性的过程,RET是段内返回,汇编后仍为RET;
如果是FAR属性的过程,RET是段间返回,汇编后RET 为 RETF.
3)段内调用返回只需设置IP
4)段间调用返回需设置IP和CS,多模块采用此设计方法
子过程的调用与返回指令
相关文档
最新文档