B2B网站_日本理论_B2B免费发布信息网站_日本看片网站_B2B企业贸易平台 -日本看片网站- 企资网

二維碼
企資網(wǎng)

掃一掃關(guān)注

當前位置: 首頁 » 企業(yè)資訊 » 科普 » 正文

C_從匯編的角度理解被調(diào)函數(shù)返回不同類型的值給

放大字體  縮小字體 發(fā)布日期:2021-11-22 16:14:41    作者:馮思樂    瀏覽次數(shù):79
導(dǎo)讀

被調(diào)函數(shù)返回不同類型得值給主調(diào)函數(shù),根據(jù)返回值類型得大小,有不同得返回方式。1 返回int示例代碼:int funcReturnInt(){int a = 3;int b = 4;return a+b;}int main(){int d = 0;d = funcReturnInt();return 0;}匯

被調(diào)函數(shù)返回不同類型得值給主調(diào)函數(shù),根據(jù)返回值類型得大小,有不同得返回方式。

1 返回int

示例代碼:

int funcReturnInt(){ int a = 3; int b = 4; return a+b;}int main(){ int d = 0; d = funcReturnInt(); return 0;}

匯編:

13: int d = 0;004010A8 mov dword ptr [ebp-4],014: d = funcReturnInt();004010AF call 等ILT+20(funcReturnDouble) (00401019)004010B4 mov dword ptr [ebp-4],eax // int返回值保存在eax寄存器,mov到[ebp-4]

函數(shù)調(diào)用時:

9: return a+b;00401046 mov eax,dword ptr [ebp-4] // 這里得[ebp-4]是被調(diào)函數(shù)得局部變量a00401049 add eax,dword ptr [ebp-8]

如果是返回指針,也同樣是通過寄存器eax。

2 返回double

示例代碼:

double funcReturndouble(){ double a = 1.1; double b = 2.2; return a+b;}double main(){ double d = 0; d = funcReturndouble(); return 0;}

匯編:

13: double d = 0;00401088 mov dword ptr [ebp-8],00040108F mov dword ptr [ebp-4],014: d = funcReturndouble();00401096 call 等ILT+10(funcReturndouble) (0040100f)0040109B fstp qword ptr [ebp-8] // 浮點棧pop給[ebp-8]

調(diào)用函數(shù)時有一個壓浮點棧操作:

9: return a+b;00401054 fld qword ptr [ebp-8] // 浮點棧push被調(diào)函數(shù)得局部變量a00401057 fadd qword ptr [ebp-10h] // 先前push入得值再加入b

float也是同樣得fstp和fld指令。

3 返回復(fù)合類型

示例代碼:

struct employee{ int id; char sex; double salary;};employee funcReturnCompoundValue(employee ee){ employee tmp(ee); return tmp;}int main(){ employee ee; ee.id=3; ee.sex = 'm'; ee.salary = 5555; employee ef; ef=funcReturnCompoundValue(ee); return 0;}

函數(shù)調(diào)用得匯編代碼:

19: employee ef;20: ef=funcReturnCompoundValue(ee);004010C4 sub esp,10h // 參數(shù)需要16個字節(jié)004010C7 mov eax,esp004010C9 mov ecx,dword ptr [ebp-10h]004010CC mov dword ptr [eax],ecx // 開始壓參004010CE mov edx,dword ptr [ebp-0Ch]004010D1 mov dword ptr [eax+4],edx004010D4 mov ecx,dword ptr [ebp-8]004010D7 mov dword ptr [eax+8],ecx004010DA mov edx,dword ptr [ebp-4]004010DD mov dword ptr [eax+0Ch],edx004010E0 lea eax,[ebp-40h]004010E3 push eax // 壓入存放返回值得起始地址(被調(diào)函數(shù)棧幀內(nèi))004010E4 call 等ILT+5(funcReturnCompoundValue) (0040100a) // 跳轉(zhuǎn)得同時會壓入返回地址004010E9

開始調(diào)用函數(shù):

7: employee funcReturnCompoundValue(employee ee)8: {00401020 push ebp00401021 mov ebp,esp00401023 sub esp,50h00401026 push ebx00401027 push esi00401028 push edi00401029 lea edi,[ebp-50h]0040102C mov ecx,14h00401031 mov eax,0CCCCCCCCh00401036 rep stos dword ptr [edi] 9: employee tmp(ee);00401038 mov eax,dword ptr [ebp+0Ch]0040103B mov dword ptr [ebp-10h],eax0040103E mov ecx,dword ptr [ebp+10h]00401041 mov dword ptr [ebp-0Ch],ecx00401044 mov edx,dword ptr [ebp+14h]00401047 mov dword ptr [ebp-8],edx0040104A mov eax,dword ptr [ebp+18h]0040104D mov dword ptr [ebp-4],eax

此時得棧幀:

調(diào)用函數(shù)時返回得匯編

10: return tmp;00401050 mov ecx,dword ptr [ebp+8] // 將返回地值得起始地址讀入 ecx00401053 mov edx,dword ptr [ebp-10h] // 待返回值得起始地址得值讀入 edx00401056 mov dword ptr [ecx],edx // 300401058 mov eax,dword ptr [ebp-0Ch]0040105B mov dword ptr [ecx+4],eax // 'm'0040105E mov edx,dword ptr [ebp-8] // 5555得半段00401061 mov dword ptr [ecx+8],edx00401064 mov eax,dword ptr [ebp-4]00401067 mov dword ptr [ecx+0Ch],eax0040106A mov eax,dword ptr [ebp+8]11: }

回到主調(diào)函數(shù):

004010E9 add esp,14h // 參數(shù)16個字節(jié)+4個字節(jié)得存入返回值得起始地址004010EC mov ecx,dword ptr [eax] // eax存儲得是存放返回值得起始地址004010EE mov dword ptr [ebp-30h],ecx // ebp-30 = 下圖得0012FF18004010F1 mov edx,dword ptr [eax+4]004010F4 mov dword ptr [ebp-2Ch],edx004010F7 mov ecx,dword ptr [eax+8]004010FA mov dword ptr [ebp-28h],ecx004010FD mov edx,dword ptr [eax+0Ch]00401100 mov dword ptr [ebp-24h],edx00401103 mov eax,dword ptr [ebp-30h]00401106 mov dword ptr [ebp-20h],eax // ebp-20 = 下圖得0012FF2800401109 mov ecx,dword ptr [ebp-2Ch]0040110C mov dword ptr [ebp-1Ch],ecx0040110F mov edx,dword ptr [ebp-28h]00401112 mov dword ptr [ebp-18h],edx00401115 mov eax,dword ptr [ebp-24h]00401118 mov dword ptr [ebp-14h],eax21: return 0;0040111B xor eax,eax

圖示:

當返回復(fù)合類型,需要在主調(diào)函數(shù)得棧幀內(nèi)指定一塊內(nèi)存空間。在被調(diào)函數(shù)得棧幀上,會保存指向主調(diào)函數(shù)存儲返回值得內(nèi)存空間得起始地址。

-End-

 
(文/馮思樂)
免責聲明
本文僅代表作發(fā)布者:馮思樂個人觀點,本站未對其內(nèi)容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔相應(yīng)責任。涉及到版權(quán)或其他問題,請及時聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
 

Copyright ? 2016 - 2025 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號

粵ICP備16078936號

微信

關(guān)注
微信

微信二維碼

WAP二維碼

客服

聯(lián)系
客服

聯(lián)系客服:

在線QQ: 303377504

客服電話: 020-82301567

E_mail郵箱: weilaitui@qq.com

微信公眾號: weishitui

客服001 客服002 客服003

工作時間:

周一至周五: 09:00 - 18:00

反饋

用戶
反饋

主站蜘蛛池模板: 软膜天花_软膜灯箱_首选乐创品牌_一站式天花软膜材料供应商! | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 杭州成人高考_浙江省成人高考网上报名| 免费分销系统 — 分销商城系统_分销小程序开发 -【微商来】 | 舞台木地板厂家_体育运动木地板_室内篮球馆木地板_实木运动地板厂家_欧氏篮球地板推荐 | 一技任务网_有一技之长,就来技术任务网| 环比机械 | 宝宝药浴-产后药浴-药浴加盟-艾裕-专注母婴调养泡浴 | 地源热泵一体机,地源热泵厂家-淄博汇能环保设备有限公司 | 法兰连接型电磁流量计-蒸汽孔板节流装置流量计-北京凯安达仪器仪表有限公司 | 危废处理系统,水泥厂DCS集散控制系统,石灰窑设备自动化控制系统-淄博正展工控设备 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | 耐驰泵阀管件制造-耐驰泵阀科技(天津)有限公司 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | PC阳光板-PC耐力板-阳光板雨棚-耐力板雨棚,厂家定制[优尼科板材] | 花纹铝板,合金铝卷板,阴极铝板-济南恒诚铝业有限公司 | 洛阳防爆合格证办理-洛阳防爆认证机构-洛阳申请国家防爆合格证-洛阳本安防爆认证代办-洛阳沪南抚防爆电气技术服务有限公司 | 新中天检测有限公司青岛分公司-山东|菏泽|济南|潍坊|泰安防雷检测验收 | 隐形纱窗|防护纱窗|金刚网防盗纱窗|韦柏纱窗|上海青木装潢制品有限公司|纱窗国标起草单位 | 冲击式破碎机-冲击式制砂机-移动碎石机厂家_青州市富康机械有限公司 | 锥形螺带干燥机(新型耙式干燥机)百科-常州丰能干燥工程 | 工作心得_读书心得_学习心得_找心得体会范文就上学道文库 | 直齿驱动-新型回转驱动和回转支承解决方案提供商-不二传动 | 西安烟道厂家_排气道厂家_包立管厂家「陕西西安」推荐西安天宇烟道 | 100_150_200_250_300_350_400公斤压力空气压缩机-舰艇航天配套厂家 | 翅片管散热器价格_钢制暖气片报价_钢制板式散热器厂家「河北冀春暖气片有限公司」 | 双段式高压鼓风机-雕刻机用真空泵-绍兴天晨机械有限公司 | 合肥展厅设计-安徽展台设计-合肥展览公司-安徽奥美展览工程有限公司 | 电采暖锅炉_超低温空气源热泵_空气源热水器-鑫鲁禹电锅炉空气能热泵厂家 | 深圳APP开发_手机软件APP定制外包_小程序开发公司-来科信 | 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | 北京网站建设公司_北京网站制作公司_北京网站设计公司-北京爱品特网站建站公司 | cnc精密加工_数控机械加工_非标平键定制生产厂家_扬州沃佳机械有限公司 | 外观设计_设备外观设计_外观设计公司_产品外观设计_机械设备外观设计_东莞工业设计公司-意品深蓝 | 温州在线网| 正压密封性测试仪-静态发色仪-导丝头柔软性测试仪-济南恒品机电技术有限公司 | 电磁辐射仪-电磁辐射检测仪-pm2.5检测仪-多功能射线检测仪-上海何亦仪器仪表有限公司 | 庭院灯_太阳能景观灯_草坪灯厂家_仿古壁灯-重庆恒投科技 | 制丸机,小型中药制丸机,全自动制丸机价格-甘肃恒跃制药设备有限公司 | 广东护栏厂家-广州护栏网厂家-广东省安麦斯交通设施有限公司 |