最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言函數(shù)棧幀解析

 更新時間:2021年09月07日 10:13:22   作者:Ayanami___Rei  
下面小編就為大家?guī)硪黄獪\談C語言函數(shù)調(diào)用參數(shù)壓棧的相關(guān)問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、什么是函數(shù)棧幀

 1.寄存器:

eax, ebx, ecx ...

ebp - 存放了指向函數(shù)棧幀棧底的地址

esp - 存放了指向函數(shù)棧幀棧頂?shù)牡刂?/p>

2.函數(shù)棧幀

函數(shù)被調(diào)用時,系統(tǒng)會在棧區(qū)為該函數(shù)開辟一塊棧空間,這個棧空間就是該函數(shù)的函數(shù)棧幀。

以main函數(shù)的調(diào)用為例

 3.棧幀的作用和維護

棧幀也叫過程活動記錄,是編譯器用來實現(xiàn)函數(shù)調(diào)用過程的一種數(shù)據(jù)結(jié)構(gòu)。從邏輯上講,棧幀為一個函數(shù)提供了執(zhí)行環(huán)境。

棧是先用高地址再用低地址,棧幀控制和保存了一個函數(shù)所需要的各種信息。

棧幀的維護離不開ebp和esp寄存器,ebp存放了指向棧幀的棧底地址的指針,esp則存放指向棧頂?shù)刂返闹羔槨?/p>

 4.棧幀結(jié)構(gòu)

以main函數(shù)為例:

 

二、函數(shù)棧幀的創(chuàng)建

環(huán)境為VS2019

​
​#include<stdio.h>
int ADD(int x, int y)
{
    int z=0;
    z=x+y;
	return z;
} 
int main()
{
	int a = 10;
	int b = 20;
	int c = 0;
	c = ADD(a, b); 
	return 0;
}​

1.匯編代碼

要研究函數(shù)棧幀我們要研究c程序的匯編代碼。如圖所示:

 

2.main函數(shù)

 

2.棧幀創(chuàng)建:

 

3.步驟

 

 

 

 

 

main函數(shù)的函數(shù)棧幀的創(chuàng)建和數(shù)據(jù)初始化就完成了。

4.ADD函數(shù)棧幀的創(chuàng)建

 add函數(shù)棧幀的創(chuàng)建和main函數(shù)棧幀創(chuàng)建是一樣的,值得注意的是,ADD函數(shù)執(zhí)行結(jié)束后的返回值保存在了寄存器eax中,就是避免ADD函數(shù)棧幀銷毀時,主函數(shù)無法訪問ADD返回值。由此可見函數(shù)返回值是如何返回的。

三.函數(shù)棧幀的銷毀

1.匯編語言

四.了解

1.函數(shù)傳參

 2.函數(shù)返回值如何返回

 3.函數(shù)中變量如何初始化和賦值

4.函數(shù)執(zhí)行結(jié)束后系統(tǒng)進行了什么操作

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容

相關(guān)文章

  • C++實現(xiàn)紅黑樹應(yīng)用實例代碼

    C++實現(xiàn)紅黑樹應(yīng)用實例代碼

    紅黑樹它一種特殊的二叉查找樹,這意味著它滿足二叉查找樹的特征,但是也有許多自己的特性,這篇文章主要給大家介紹了關(guān)于C++實現(xiàn)紅黑樹的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • C++學(xué)習(xí)進階篇之類大小計算和this指針

    C++學(xué)習(xí)進階篇之類大小計算和this指針

    this是C++中的一個關(guān)鍵字,也是一個const指針,它指向當(dāng)前對象,通過它可以訪問當(dāng)前對象的所有成員,下面這篇文章主要給大家介紹了關(guān)于C++學(xué)習(xí)進階篇之類大小計算和this指針的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • C語言基于EasyX實現(xiàn)貪吃蛇

    C語言基于EasyX實現(xiàn)貪吃蛇

    這篇文章主要為大家詳細介紹了C語言基于EasyX實現(xiàn)貪吃蛇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • vs運行時報C4996代碼錯誤的問題解決

    vs運行時報C4996代碼錯誤的問題解決

    C4996錯誤的意思:是VS覺得strcpy這函數(shù)不安全,建議你使更安全的函數(shù),那么如何解決呢,本文主要介紹了vs運行時報C4996代碼錯誤的問題解決,感興趣的可以了解一下
    2024-01-01
  • C++實現(xiàn)list增刪查改模擬的示例代碼

    C++實現(xiàn)list增刪查改模擬的示例代碼

    本文主要介紹了C++實現(xiàn)list增刪查改模擬,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • C語言學(xué)習(xí)之鏈表的實現(xiàn)詳解

    C語言學(xué)習(xí)之鏈表的實現(xiàn)詳解

    鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。這篇文章主要介紹了C語言中鏈表的實現(xiàn),需要的可以參考一下
    2022-11-11
  • C語言實現(xiàn)BMP轉(zhuǎn)換JPG的方法

    C語言實現(xiàn)BMP轉(zhuǎn)換JPG的方法

    這篇文章主要介紹了C語言實現(xiàn)BMP轉(zhuǎn)換JPG的方法,涉及C#圖片格式轉(zhuǎn)換的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • C++超詳細講解強制類型轉(zhuǎn)換

    C++超詳細講解強制類型轉(zhuǎn)換

    在C++語言中新增了四個關(guān)鍵字static_cast、const_cast、reinterpret_cast和dynamic_cast。這四個關(guān)鍵字都是用于強制類型轉(zhuǎn)換的
    2022-05-05
  • 淺析操作系統(tǒng)中的虛擬地址與物理地址

    淺析操作系統(tǒng)中的虛擬地址與物理地址

    本文主要介紹了操作系統(tǒng)中的虛擬地址與物理地址。在早期的計算機中,要運行一個程序,會把這些程序全都裝入內(nèi)存,程序都是直接運行在內(nèi)存上的,也就是說程序中訪問的內(nèi)存地址都是實際的物理內(nèi)存地址。那當(dāng)程序同時運行多個程序時,操作系統(tǒng)是如何為這些程序分配內(nèi)存的呢
    2021-06-06
  • C++ new、delete(new[]、delete[])操作符重載需要注意的問題

    C++ new、delete(new[]、delete[])操作符重載需要注意的問題

    這篇文章主要介紹了C++ new、delete(new[]、delete[])操作符重載需要注意的問題,本文同時講解了兼容默認的 new、delete 的錯誤處理方式、多態(tài)的問題等內(nèi)容,需要的朋友可以參考下
    2014-10-10

最新評論

抚宁县| 治多县| 若尔盖县| 孝感市| 会同县| 扶余县| 铅山县| 平果县| 石泉县| 南投县| 长子县| 平陆县| 浦城县| 扬州市| 长丰县| 天门市| 西平县| 修水县| 黎川县| 南安市| 平阴县| 岫岩| 平凉市| 南开区| 阿勒泰市| 绥江县| 宁津县| 龙泉市| 特克斯县| 陇南市| 桦川县| 阿勒泰市| 确山县| 榆林市| 渝中区| 西华县| 庆阳市| 临猗县| 广水市| 汉中市| 金坛市|