汇编语言子程序是如何定义的?

 我来答
大野瘦子
高粉答主

2019-10-18 · 繁杂信息太多,你要学会辨别
知道小有建树答主
回答量:1227
采纳率:100%
帮助的人:33.9万
展开全部

这样定义的:

子程序名 PROC     NEAR|FAR

               .

                .

              RET

子程序名 ENDP

子程序名相当于标号,表示本过程的符号地址。过程有NEAR和FAR两种类型,FAR型的过程可供段间调用,NEAR型过程仅供段内调用。

在一个过程中,至少要有一条返回指令RET,它可以书写在过程中的任何位置,但是过程执行的的最后一条指令一定是RET。

扩展资料:

注意事项

一、子程序调用指令

格式:CALL   [NEAR PTR]    子程序名

CALL指令的两个作用,1.将断点地址(CALL指令的下一条指令地址)压栈保存,2.转去子程序执行。

[NEAR PTR]可以省略。

二、返回指令

格式:RET     [N]

指令作用:实现子程序执行完后返回主程序的指令。从堆栈栈顶弹出一个字数据(段内调用)送入IP作为返回地址。N是立即数,执行完RET之后,再将SP增加N,也叫“平栈”。

gcbjoy
推荐于2017-09-16 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1.1万
采纳率:92%
帮助的人:2143万
展开全部
汇编语言子程序以proc语句行开始,以endp语句行结束。如:
p1 proc near(或far)
..........................
p1 endp
在主程序中用call p1调用。

主程序和子程序之间传递参数通常通过栈来进行,当然也可以用某些缺省的寄存器 或者 内存来传递。但以通过栈来传递参数程序的通用性最强。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
华芝塔尼欧
推荐于2017-10-13 · TA获得超过206个赞
知道答主
回答量:68
采纳率:0%
帮助的人:33.6万
展开全部
  1.    直接jmp跳转过去,然后ret回来。

  2. call xxx

xxx proc uses eax,esi,edi,var:ddword......

xxx endp

也可以带参数的。第二种方式格式就是这样,说白了也是jmp跳转。只是经过了编译器优化。防止程序员跳转,导致堆栈前后不对齐。

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
中考试题库
2015-11-08 · TA获得超过381个赞
知道小有建树答主
回答量:310
采纳率:33%
帮助的人:149万
展开全部
funname proc [uses reg1 reg2 ……] [,参数:类型,参数:类型,……]
…………
funname endp

这是masm的语法格式,在win32汇编中,参数类型都是dword,类型可以省略
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhxiufan
2014-03-03 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38384
国家科技进步奖

向TA提问 私信TA
展开全部
汇编语言的子程序其实就是一个从“标号”开始以ret结束的程序段。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式