加载中…
个人资料
xiaocao
xiaocao
  • 博客等级:
  • 博客积分:0
  • 博客访问:3,560
  • 关注人气:25
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C语言的函数返回值所存放的寄存器

(2010-06-03 07:21:49)
标签:

杂谈

分类: MMX/SSE/AVX

转载时请注明原文出处(http://blog.sina.com.cn/wyw1976)及作者邮箱(wyw1976@gmail.com)

 

 

      在C语言中,函数的返回值存放在寄存器EAX和EDX中,EAX存放低32位,EDX存放高32位,如果返回值不足32位,则只用到EAX。
    下面的这段代码可以验证这点:


#include <windows.h>

int test_1()
{
     int m=10;
     return m;
}

__int64  test_2()
{
     __int64 m=0x0123456789abcdef;              
     return m;
}

int main()

{
      int ret1;
      __int64 ret2;

     ret1 = test_1();
     ret2 = test_2(); 
     return 1;
 }


   在VS2008中,设置断点(F9),运行程序(F5),右击鼠标,选择“Go TO Deassembly”, 可以看到汇编代码如下图所示:

http://s4/middle/5d9051c0g8817cba0a6e3&690


     可以看出,C语言在执行return时,对应的汇编代码就是保存返回值到EDX:EAD:test_1的返回值(10)放在EAX中,而test_2的返回值(0x0123456789abcdef)的低32位放在EAX中(0x89abcdef),高32位放在EDX中(0x01234567)。

    继续跟踪代码,如下:

 http://s12/middle/5d9051c0g8829f94c95ab&690

在子函数调用返回后,编译器将EDX:EAX中的值赋给指定的变量(ret1, ret2)。

 


    

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有