亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

從匯編看c++函數的默認參數的使用說明

2020-01-26 16:16:52
字體:
來源:轉載
供稿:網友

在c++中,可以為函數提供默認參數,這樣,在調用函數的時候,如果不提供參數,編譯器將為函數提供參數的默認值。下面從匯編看其原理。

下面是c++源碼:

復制代碼 代碼如下:

int add(int a = 1, int b = 2) {//參數a b有默認值
    return a + b;
}
int main() {
   int c= add();//不提供參數

}

下面是mian函數里面的匯編碼:
復制代碼 代碼如下:

; 4    : int main() {

    push    ebp
    mov    ebp, esp
    push    ecx;為局部變量c分配了4字節的存儲空間 ecx為32位寄存器

; 5    :    int c= add();

    push    2;將2壓棧,就是add函數中b參數的默認值 這里參數壓棧方向是從右向左
    push    1;將1壓棧,就是add函數中a參數的默認值
    call    ?add@@YAHHH@Z                ; 調用add函數
    add    esp, 8;釋放剛才為add提供參數時的儲存空間
    mov    DWORD PTR _c$[ebp], eax;eax寄存器里面存放add函數返回值,寫入變量c里面

; 6    :   
; 7    : }

    xor    eax, eax
    mov    esp, ebp
    pop    ebp
    ret    0


下面是add函數的匯編碼:
復制代碼 代碼如下:

?add@@YAHHH@Z PROC                    ; add

; 1    : int add(int a = 1, int b = 2) {

    push    ebp
    mov    ebp, esp

; 2    :     return a + b;

    mov    eax, DWORD PTR _a$[ebp];將參數a的值寫入寄存器eax
    add    eax, DWORD PTR _b$[ebp];將參數b的值取出與eax里面的值相加,結果存入eax寄存器

; 3    : }

    pop    ebp
    ret    0
?add@@YAHHH@Z ENDP


下面是只提供一個參數值得情況

先看c++源碼:

復制代碼 代碼如下:

int add(int a = 1, int b = 2) {//參數a b有默認值
    return a + b;
}
int main() {
   int a = 3;
   int c= add(a);//只為a提供參數

}

下面是main函數里面的匯編碼:
復制代碼 代碼如下:

; 4    : int main() {

    push    ebp
    mov    ebp, esp
    sub    esp, 8;esp寄存器作為棧指針移動8字節,為局部變量a,c預留存儲空間

; 5    :    int a = 3;

    mov    DWORD PTR _a$[ebp], 3;將3寫入局部變量a所在存儲空間

; 6    :    int c= add(a);//不提供參數

    push    2;將2壓棧,提供b參數默認值
    mov    eax, DWORD PTR _a$[ebp];取出a的值,放入寄存器eax里面
    push    eax;將eax里面的值壓棧,提供參數a的值,這里不是提供的默認值1
    call    ?add@@YAHHH@Z                ; 調用add函數
    add    esp, 8;釋放剛才為調用函數add為參數分配的8byte空間
    mov    DWORD PTR _c$[ebp], eax;eax里面存放調用函數的結果,寫到c所在存儲空間里面

; 7    :   
; 8    : }

    xor    eax, eax
    mov    esp, ebp
    pop    ebp
    ret    0


可以看到,和上面的不同之處在于沒有為a提供默認的參數值。

下面是add函數的匯編碼,與第一種情況一樣,沒有變化:

復制代碼 代碼如下:

?add@@YAHHH@Z PROC                    ; add

; 1    : int add(int a = 1, int b = 2) {//參數a b有默認值

    push    ebp
    mov    ebp, esp

; 2    :     return a + b;

    mov    eax, DWORD PTR _a$[ebp]
    add    eax, DWORD PTR _b$[ebp]

; 3    : }

    pop    ebp
    ret    0
?add@@YAHHH@Z ENDP


這里由于為參數a給出了明確的值,因此編譯器只為參數b提供默認值??上攵魹閍dd函數都提供了明確的參數值,那么編譯器就不會為參數a,b提供默認值了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久99精品久久久久久青青91| 成人黄色大片在线免费观看| 日韩不卡在线观看| 亚洲性视频网站| 欧美人与性动交a欧美精品| 国内外成人免费激情在线视频网站| 国产精品一香蕉国产线看观看| 97人人爽人人喊人人模波多| 亚洲japanese制服美女| 国产精品中文字幕久久久| 成人av在线网址| 欧美午夜电影在线| 亚洲性生活视频在线观看| 国产精品18久久久久久麻辣| 日韩电影中文字幕在线| 亚洲图片在线综合| 欧美激情中文字幕乱码免费| 韩国国内大量揄拍精品视频| 久久精品视频导航| 亚洲电影av在线| 亚洲毛片在线观看| 欧美超级乱淫片喷水| 亚洲区一区二区| 日韩精品在线第一页| 国产精品电影久久久久电影网| 亚洲欧美一区二区三区情侣bbw| 欧美日韩国产精品| 国产精品h在线观看| 国产精自产拍久久久久久| 亚洲视频综合网| 欧美性猛交xxxx乱大交极品| 日韩大陆欧美高清视频区| 欧美老女人性视频| 少妇高潮 亚洲精品| 亚洲最新在线视频| 欧美肥臀大乳一区二区免费视频| 欧美亚洲激情在线| 欧美日韩亚洲精品内裤| 国产精品丝袜久久久久久高清| 国产精品免费视频xxxx| 日韩有码在线视频| yellow中文字幕久久| 精品自在线视频| 亚洲美女性生活视频| 亚洲精品国产精品久久清纯直播| 亚洲最大av网站| 亚洲欧美视频在线| 成人观看高清在线观看免费| 日韩电影中文字幕| 国产精品久久国产精品99gif| 亚洲视频一区二区三区| 国产日韩专区在线| 激情成人在线视频| 91免费视频网站| 亚洲一区二区三区777| 国产精品成人一区二区三区吃奶| 久久色精品视频| 亚洲黄色av女优在线观看| 亚洲精品小视频在线观看| 91久热免费在线视频| 欧美色视频日本高清在线观看| 国产一区二区三区中文| 亚洲欧美激情在线视频| 国产精品成人一区二区三区吃奶| 国产午夜精品免费一区二区三区| 亚洲精品视频在线观看视频| 久久久亚洲影院你懂的| 亚洲视频欧洲视频| 成人av在线网址| 国产精品久久久久免费a∨大胸| 日韩美女视频免费看| 欧美肥臀大乳一区二区免费视频| 亚洲国产日韩欧美综合久久| 日韩在线欧美在线国产在线| 青青草原一区二区| 精品国产区一区二区三区在线观看| 欧美午夜激情在线| 麻豆国产精品va在线观看不卡| 亚洲男人天堂手机在线| 亚洲综合小说区| 国产精品综合久久久| 久久久久久香蕉网| 欧美日韩精品二区| 国产免费一区二区三区香蕉精| 亚洲欧洲一区二区三区在线观看| 欧美精品久久久久| 97精品欧美一区二区三区| 欧美一级大片在线免费观看| 欧美国产在线电影| 精品性高朝久久久久久久| 超在线视频97| 欧美日韩激情网| 中文字幕日韩欧美在线| 亚洲最大成人网色| 欧美高清视频在线播放| 欧美裸体男粗大视频在线观看| 国产免费一区二区三区在线能观看| 色噜噜久久综合伊人一本| 日韩av网址在线| 亚洲久久久久久久久久久| 亚洲丝袜在线视频| 日韩欧美国产免费播放| 欧美成人精品影院| 国产精品久久久久久久久免费看| 欧美激情一区二区三区高清视频| 日韩资源在线观看| 国产欧美久久久久久| 91免费版网站入口| 在线视频一区二区| 欧美性高跟鞋xxxxhd| 亚洲午夜av久久乱码| 91精品综合视频| 日韩av观看网址| 日本伊人精品一区二区三区介绍| 国产精品久久久久久久天堂| 在线成人免费网站| 91影视免费在线观看| 欧美精品18videos性欧| 久久精品2019中文字幕| 在线精品国产欧美| 红桃视频成人在线观看| 国产精品久久久久久av下载红粉| 欧美大胆a视频| 亚洲天堂2020| 欧美亚洲另类制服自拍| 国产精品免费久久久久影院| 国内久久久精品| 日韩电影免费观看在线| 最新69国产成人精品视频免费| 国产91久久婷婷一区二区| 欧美性极品少妇精品网站| 91在线视频导航| 欧美一级淫片丝袜脚交| 日本高清久久天堂| 中文字幕在线国产精品| 欧美视频在线免费看| 91精品啪在线观看麻豆免费| 欧美日韩999| 国产精品都在这里| 欧美大荫蒂xxx| 中文字幕亚洲欧美日韩在线不卡| 精品一区二区亚洲| 国产91九色视频| 97在线观看视频| 国产高清视频一区三区| 日本道色综合久久影院| 亚洲欧美国产精品久久久久久久| 欧美精品第一页在线播放| 亚洲精品www久久久久久广东| 亚洲欧美日韩国产中文专区| 欧美最顶级丰满的aⅴ艳星| 麻豆精品精华液| 亚洲国产黄色片| 日本一区二三区好的精华液| 久久久av亚洲男天堂| 亚洲免费高清视频| 日韩精品久久久久久久玫瑰园| 亚洲一区二区三区四区在线播放| 日韩经典一区二区三区| 91精品国产一区| 亚洲在线一区二区| 国产小视频91| 日韩免费在线免费观看| 欧美日韩福利电影|