宏调用与过程调用的区别?

dapeng112200 2008-07-24 09:15:20
请问各位宏调用与过程调用的区别在哪,麻烦详细说清楚下。
...全文
1181 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
土豆 2008-07-24
  • 打赏
  • 举报
回复
宏调用在汇编的时候会在原地展开,就像C语言中的宏函数一样,其实就是同样的处理方式.他能够减少你源代码的长度,但对目标代码没有任何影响.同一个宏在不同地方调用,会在这样的地方都重复展开.
chtitaxie 2008-07-24
  • 打赏
  • 举报
回复
大体来说,宏调用与过程调用都可以减少代码的输入量...
其中,宏调用的语说的编译时会把各条指令从新放入到代码中去,没有减少原代码的长度.
而过程调用在编译时不会加入到原代码的调用处,
(相当于调用处有句转移指令到过程中,而过程中的最后也有一句转移指令返回),
也就使原代码长度相对减少了.
BAYNPU 2008-07-24
  • 打赏
  • 举报
回复
0、宏调用的格式同一般指令一样,在使用宏指令的位置写下宏名,后跟实体参数,如果有多个参数,应按形参顺序填入实参,也用逗号分隔,在汇编时,宏指令被汇编程序用对应的代码序列替代,称之为宏展开。

1、 过程说明伪指令PROTO语句中的各个项必须与相应过程定义伪指令PROC的各个项一致。使用PROTO伪指令声明过程之后,汇编系统将进行类型检测,才可以使用INVOKE调用过程。
与PROTO配合使用的过程调用伪指令是INVOKE,它的格式如下:INVOKE 过程名[,参数,...]
过程调用伪指令自动创建调用过程所需要的代码序列,调用前将参数压入堆栈、调用后平衡堆栈。其中“参数”表示通过堆栈将传递给过程的实在参数。
采用过程声明和过程调用伪指令后,汇编语言子程序间也可以象高级语言一样利用实、形参数结合传递参数。但实、形结合的实质还是用堆栈传递参数。
dapeng112200 2008-07-24
  • 打赏
  • 举报
回复
多谢大家,回答的差不多,我就平均给分了。
cnzdgs 2008-07-24
  • 打赏
  • 举报
回复
宏调用在编译时展开,把代码插入到宏出现的位置;过程调用时程序运行时控制转移到被调用的过程,执行完后返回继续执行后面的代码。
BMCRNET 2008-07-24
  • 打赏
  • 举报
回复
宏是替换

过程不是
wuyinggu 2008-07-24
  • 打赏
  • 举报
回复
区别:
1 宏调用:编译时在原地插入代码,每调用一次将会增加一份代码量,过程调用则是在运行时刻调用.函数调用过程就不必细说了,所有调用都是共享同一份代码.
2当然宏有宏的好处,省去压栈等处理,运行速度快.
mare 2008-07-24
  • 打赏
  • 举报
回复
宏是代码替代的意思,代码在预处理的时候,宏就已经展开了,对中间代码来说,宏被替代成普通的代码,只是写代码的时候方便而已,并不影响程序工作,也不影响执行效率。对单片机来说,如果宏错了,一般意味着编译器自己的语法判断出错,而很少是你的错。

调用过程是其实是移动指令指针,在调用一个过程的时候,首先要把当前所有有用的信息压栈(对大多数单片机来说,要你自己搞定,尤其是寄存器里的数据,还要你自己防止压栈的时候压爆数据区),然后把指令执行指针调到过程的首地址,执行完以后,再把指令执行指针调回调用位置,然后出栈(也就是恢复你调用前的所有有用数据)。调用过程明显是会降低程序效率的,而且还会为你制造出大量的堆栈错误和越界错误,但调用过程又是十分可信任的,尤其是宏老是出错的时候。

大大啊,见我打这么多只字,心地善良的话就施舍一点分数给我吧~~
^_^
homesos 2008-07-24
  • 打赏
  • 举报
回复
1.宏调用,就是将宏在使用宏的地方将宏内容展开,相当于字符串替代。
2.方法调用,需要进行栈操作,调用地址、参数、临时变量入栈、出栈,相应的寄存器都要发生变动。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧