子程序调用
- 格式:pptx
- 大小:81.37 KB
- 文档页数:7
子程序存储在存储器中,可供一个或多个调用程序(主程序)反复调用。
主程序调用子程序时使用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、子程序的调用和返回指令子程序的调用和返回是一对互逆操作,也是一种特殊的转移操作。
一方面,之所以说是转移,是因为当调用一个子程序时,程序的执行顺序被改变,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)当子程序执行完时,需要返回到调用它的程序之中。
子程序调用指令
子程序调用指令是指一个程序在一段程序运行时,该段程序执行某个功能时,会调用由另一段子程序处理的指令的一种机器指令。
子程序调用指令的运行过程主要分为六个步骤:
1、先将书写代码时在子程序指令里声明的一个标记符(参数可以有一到多个)放入程序计数器,编程使程序跳转至对应的子程序。
2、将参数放入堆栈中。
3、程序计数器指向下一个指令(位置),将其存入返回地址寄存器中。
4、转至子程序,调用子程序中的指令,直至子程序返回跳转指令。
5、将从子程序返回的参数或结果放入程序总线中。
6、程序计数器指向堆栈中保存的返回地址,继续执行程序。
子程序调用指令的使用有很多优点,可以将程序设计的复杂性降低,提高代码的可维护性,减少重复的编码,并使程序更加结构良好和清晰。
同时,由于调用子程序时需要使用到跳转指令,也可以减少程序运行所需的时间。
然而,程序的运行效率有时也会根据子程序的大小和复杂性以及条件的多少而有所降低。
fx5u调用子程序实例FX5U是三菱电机推出的一款高性能可编程控制器,具有强大的功能和灵活的编程能力。
在FX5U中,调用子程序是一种常用的编程方法,可以提高程序的可读性和可维护性。
本文将以FX5U调用子程序为例,介绍如何在FX5U中使用子程序来实现特定的功能。
我们需要了解什么是子程序。
子程序是一个独立的程序段,它可以在主程序中被调用,并且可以传递参数和返回结果。
子程序的好处是可以将复杂的逻辑进行模块化,提高程序的可读性和可维护性。
在FX5U中,可以通过CALL指令来调用子程序。
在FX5U中,调用子程序的步骤如下:1. 首先,需要定义子程序。
在程序编辑器中,可以通过编写子程序的代码来定义子程序。
子程序的代码可以包含各种逻辑操作和功能模块。
2. 在主程序中,使用CALL指令来调用子程序。
CALL指令的语法为CALL 子程序名。
3. 可以在CALL指令中传递参数给子程序。
参数可以是变量、寄存器或常数,用于向子程序传递数据或配置信息。
4. 子程序执行完毕后,可以通过RET指令返回到主程序,并将结果传递回去。
RET指令用于结束子程序的执行。
下面以一个简单的例子来说明如何在FX5U中调用子程序。
假设我们需要编写一个程序,实现两个数的相加功能。
我们可以将相加的逻辑封装在一个子程序中,然后在主程序中调用这个子程序。
在程序编辑器中定义子程序。
假设我们将子程序命名为ADD,代码如下:```SUB ADDLD A, X ; 将X寄存器的值加载到A寄存器ADD A, Y ; 将Y寄存器的值与A寄存器的值相加ST A, Z ; 将结果存储到Z寄存器RET ; 返回主程序ENDSUB```然后,在主程序中调用子程序。
代码如下:```LD X, 10 ; 将10赋值给X寄存器LD Y, 20 ; 将20赋值给Y寄存器CALL ADD ; 调用ADD子程序LD Z, A ; 将A寄存器的值加载到Z寄存器```通过以上代码,我们可以实现将X寄存器和Y寄存器的值相加,并将结果存储到Z寄存器中。
1200子程序调用指令以1200子程序调用指令为标题,写一篇文章在计算机编程中,子程序是一段独立的代码,可以被主程序调用。
通过使用子程序,我们可以将复杂的任务分解成一系列较小的任务,使程序更加可读、易于维护。
而1200子程序调用指令是一种特定的指令,用于在汇编语言中调用子程序。
本文将介绍1200子程序调用指令的使用方法和注意事项。
我们需要了解如何定义和使用子程序。
在汇编语言中,子程序通常以一段标签标识,并且可以接受参数和返回结果。
在定义子程序时,我们需要使用一些特定的指令来保存寄存器的值,并在子程序结束后恢复这些值。
这样可以确保在子程序调用完成后,程序的状态与调用前保持一致。
在使用1200子程序调用指令之前,我们需要将子程序的地址存储在一个特定的寄存器中。
在调用子程序时,我们可以使用1200子程序调用指令来跳转到存储在寄存器中的地址,并将控制权交给子程序。
子程序执行完成后,会返回到调用指令的下一条指令继续执行。
在进行子程序调用时,我们需要注意一些事项。
首先,在调用子程序之前,我们需要将参数传递给子程序。
这可以通过将参数存储在寄存器或内存中来实现。
在子程序内部,我们可以使用这些参数进行计算或其他操作。
在子程序返回时,我们可以将结果存储在寄存器或内存中,供主程序使用。
我们需要注意子程序调用的返回地址。
在1200子程序调用指令中,返回地址是自动保存在栈中的。
这意味着在子程序内部,我们可以自由地使用栈来保存其他临时数据,而不会破坏返回地址。
在子程序返回时,通过使用返回指令,将栈中保存的返回地址弹出,程序会跳转到返回地址所指向的位置。
我们还需要注意子程序的参数传递和返回结果的存储。
在使用1200子程序调用指令时,通常使用寄存器来传递参数和存储返回结果。
这是因为寄存器的访问速度比内存更快,可以提高程序的执行效率。
但是需要注意的是,在调用子程序之前,我们需要保存寄存器中的值,并在子程序返回后恢复这些值,以防止数据丢失或错误。
发那科加工中心子程序调用编程序例子发那科加工中心是一种高效、精确的机械加工设备,可以广泛应用于各种制造业领域。
其中,子程序调用编程序是发那科加工中心中重要的功能之一。
子程序调用编程是一种编写程序的方法,通过在主程序中调用子程序,可以实现复用代码、提高程序的灵活性和可读性。
在发那科加工中心上,子程序调用编程可以帮助操作员实现更加高效的加工操作。
下面是一个示例,展示了如何在发那科加工中心上使用子程序调用编程:```主程序: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指令结束子程序。
通过使用子程序调用编程,操作员可以将重复性的加工操作封装在子程序中,通过简单的调用实现复用。
这样可以大大提高编程效率,减少出错的可能性,并且使程序更加易读易懂。
加工中心是一种高精度、高效率的数控机床,其主要作用是对工件进行加工。
在加工中心的操作过程中,通常会涉及到多个子程序的调用。
如何合理地调用多个子程序,可以有效提高加工效率,保证加工质量,本文将从以下几个方面介绍加工中心主程序调用多个子程序的方法:一、了解加工中心主程序的结构加工中心主程序通常采用G代码和M代码进行编程。
G代码用于控制加工中心的运动轨迹和加工轨迹,M代码用于控制加工中心的辅助功能,如刀具切换、冷却液开关等。
在编写加工中心主程序时,需要充分了解加工中心的结构和工作原理,明确每个子程序的功能和调用顺序。
二、合理规划加工过程中的子程序在加工中心的加工过程中,通常会涉及到多个子程序,如加工轨迹生成、刀具切换、冷却液控制等。
在编写加工中心主程序时,需要对加工过程进行合理规划,明确每个子程序的功能和调用顺序,确保加工过程顺利进行。
三、采用模块化编程思想在编写加工中心主程序时,可以采用模块化编程思想,将不同功能的子程序分解成多个模块,每个模块负责完成相应的功能。
通过模块化编程,可以有效提高代码的复用性和可维护性,简化主程序的编写和调试过程。
四、合理使用宏指令和循环结构在加工中心主程序中,可以合理使用宏指令和循环结构,简化代码的编写和提高代码的可读性。
宏指令可以将一系列操作封装成一个整体,通过简单的调用即可完成复杂的操作;循环结构可以简化重复操作的编写,提高代码的复用性和可维护性。
五、加强调试和测试工作在编写加工中心主程序时,需要加强调试和测试工作,确保主程序和子程序之间的调用顺利进行。
可以通过模拟加工、单步调试等方式对主程序和子程序进行验证,及时发现和解决问题,保证加工过程的顺利进行。
通过以上几点方法的合理运用,可以有效提高加工中心主程序调用多个子程序的效率和质量,确保加工过程的顺利进行。
希望本文对加工中心主程序调用多个子程序的方法有所帮助。
一、优化主程序结构加工中心的主程序结构通常需要按照加工过程的逻辑顺序来组织。