在汇编语言中调用函数后,函数返回值存储在哪里?

在汇编语言中调用函数后,函数返回值存储在哪里?[标签:汇编语言,调用函数,函数]1.一个函数调用后的返回值,在汇编语言中存储在哪里?是在eax中吗?2.会不会因为不同的高... 在汇编语言中调用函数后,函数返回值存储在哪里?
[ 标签:汇编语言,调用函数,函数 ]
1.一个函数调用后的 返回值,在汇编语言中存储在哪里? 是在eax 中吗?
2.会不会因为不同的高级语言编译方式不同,导致返回值存储在其他地方呢?比如C和Delphi
展开
 我来答
琉璃易碎smile
2015-10-22 · TA获得超过1.6万个赞
知道大有可为答主
回答量:4789
采纳率:92%
帮助的人:323万
展开全部
调用函数后返回值都是存储在EAX中
下面来看一下执行过程
在主程序中每次调用函数时,先依次把各参数以相反的顺序入栈;
然后call func_name, 这里call要做两件事: 一是把函数的返回地址入栈,二是让指令执行指针%eip指向函数开始处。

开始执行
现在函数要开始执行了,但它执行函数代码前还要做一点小事,首先把原来的基地址寄存器%ebp值入栈,因为在程序执行中%ebp要另作它用, 接着堆栈指针%esp的值复制给%ebp, 此后在函数执行中%ebp一直保持不变,可以由此寻址获得函数参数。
pushl %ebp
movl %esp, %ebp
下面开始执行函数代码了。函数先要把它的局部变量保存在栈中,这很简单。比如要保存一个long型数据,只要把%esp指针向下移动4个字节(因为栈增长方向是由高地址到低地址),再根据%esp把该数据移入. 下面是保存两个局部变量long后的堆栈内容:
Parameter #N <--- N*4+4(%ebp)
...
Parameter 2 <--- 12(%ebp)
Parameter 1 <--- 8(%ebp)
Return Address <--- 4(%ebp)
Old %ebp <--- (%ebp)
Local Variable 1 <--- -4(%ebp)
Local Variable 2 <--- -8(%ebp) and (%esp)
从上可以看出通过%ebp基地址寻址可以访问所有的函数参数和局部变量. 当然也可以不用
%ebp而用其它的寄存器进行同样的基地址寻址。但对于x86结构使用%ebp寄存器可能会更
快一点。
执行结束:
zirwy
2010-12-17 · TA获得超过493个赞
知道小有建树答主
回答量:86
采纳率:0%
帮助的人:127万
展开全部
如果是纯汇编的话,返回值应该是程序决定的,比如可以放在AX中,或者放在某个存储单元中,这个似乎没有严格的规定,而是由编程人员根据实际情况,认为放在什么地方合适。
如果是高级语言的话,是由编译器决定的。比如KeilC就规定,不同数据类型的返回值,会存在指定的寄存器中,如char类型的就放在R7中,这样规定后,如果你是C和汇编嵌套的,也就知道该到哪里去存和取返回值了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8ccdf0b
2010-12-18 · TA获得超过185个赞
知道答主
回答量:36
采纳率:0%
帮助的人:0
展开全部
是WIN32汇编么
是的话调用函数后返回值都是存储在EAX中的
C和Delphi函数的返回值同样是存储在EAX中 这也是方便了在汇编中调其他语言写的函数
欢迎一起交流,可以给我发短消息。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
djuqgn
2010-12-18 · TA获得超过689个赞
知道小有建树答主
回答量:402
采纳率:0%
帮助的人:290万
展开全部
返回值根据你自己函数的定义而定的,并不是固定会返回什么值
比如你函数声明为void a(char *pchar);则无返回值
int b(char *pchar);则返回整形值,根据情况而定
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
这人可能有点帅
2015-09-29 · TA获得超过1639个赞
知道小有建树答主
回答量:1055
采纳率:0%
帮助的人:159万
展开全部
默认是在eax里.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式