宏程序与子程序调用与区别

宏程序与子程序调用与区别,第1张

1.在汇编后产生的.obj文件中,程序定义依然存在,而宏定义却不复存在。

2.子程序调用是在执行时通过CALL指令完成的,而宏调用是在汇编时进行宏展开,被相应宏体所取代。

3.将多次调用的一段代码定义为宏指令,与使用子程序相比,其执行速度要快(因为过程需要调用和返回),但目标代码长。

4.宏指令的参数是在汇编时进行形实替换的,而子程序的参数是在执行时通过寄存器或堆栈等方式传递的。

大概想到这些,供参考

在一个加工程序中,如果其中有些加工内容完全相同或相似,为了简化程序,可以把这些重复的程序段单独列出,并按一定的格式编写成子程序。主程序在执行过程中如果需要某一子程序,通过调用指令来调用该子程序,子程序执行完后又返回到主程序,继续执行后面的程序段。子程序(subroutine)是一个概括性的术语,任何高级程序所调用的程序,都被称为子程序。它经常被使用在汇编语言层级上。子程序的主体(body)是一个代码区块,当它被调用时就会进入运行。

数控系统为用户配备了强有力的类似于高级语言的宏程序功能,用户可以使用变量进行算术运算、逻辑运算和函数的混合运算,此外宏程序还提供了循环语句、分支语句和子程序调用语句,利于编制各种复杂的零件加工程序,减少乃至免除手工编程时进行繁琐的数值计算,以及精简程序量。宏程序指令适合抛物线、椭圆、双曲线等没有插补指令的曲线编程;适合图形一样,只是尺寸不同的系列零件的编程;适合工艺路径一样,只是位置参数不同的系列零件的编程。较大地简化编程;扩展应用范围。

宏指令表面看起来与调用子程序有点象,但区别是很大的.

宏指令是用一个“单词”代替一段程序或字符串,编译时编译程序见到这个“单词”就把你定义的这段程序或字符串插进去代替这个“单词”,编译好的机器码再反编译后你将看不到这个宏指令,只能看到插进去的程序或字符串.你在程序中写了多条同样的宏指令编译后可看到同样多条插入的程序段或字符串,编译后的机器码会变长.

调用子程序编译后这里还是这条调用指令.写了多次调用子程序编译后也只有一段子程序,编译后的机器码不会变长.

所以一般在程序中多次使用一个常数,这个常数如果需要修改(在编程时,不是运行时)而且多处都做同样的修改.用宏指令就比较方便,修改时只要在头上宏指令定义改一处就行了.

比如说你要编一个上课打铃程序,上课时间长度和休息时间长度在开头定义:

SKSJ

EQU

45

上课时间

XXSJ

EQU

15

休息时间.

在程序中要用到上课和休息时间处都用这两个"单词"代替,如果头头要求把上课时间改为40,休息时间改为10,只要这两句改成:

SKSJ

EQU

40

上课时间

XXSJ

EQU

10

休息时间.

就行了,不需要到程序里一个一个找出来修改,一个一个找出来修改还容易出错.这样还比较直观,程序中见到SKSJ就知道是上课时间,不容易与其他同样用到45这个数的地方搞混.

当然也可以定义成一句或几句指令,这样可以缩短汇编语言的长度(不是机器码的长度,宏指令不会缩短编译出来的机器码码的长度).定义成一句或几句指令俺没用过,只见到别人用过.

如果多次要用到同一段程序,一般使用子程序,这段程序只要写一次就行了,要用时用子程序调用.

但子程序调用因为多了转移和返回,所以运行时间要稍长些.宏指令没有这个问题,但编译好的机器码要长些.


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7698503.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-08
下一篇2023-04-08

发表评论

登录后才能评论

评论列表(0条)

    保存