亚洲AV乱码一区二区三区女同,欧洲在线免费高清在线a,中文字幕丝袜四区,老少配老妇熟女中文高清

<s id="38axe"><nobr id="38axe"></nobr></s><abbr id="38axe"><u id="38axe"></u></abbr>

<sup id="38axe"></sup>
    <acronym id="38axe"></acronym>
  • <s id="38axe"><abbr id="38axe"><ins id="38axe"></ins></abbr></s>
    
    
        <s id="38axe"></s>

        深入了解C語(yǔ)言-函數(shù)的使用[2]

        程序員 責(zé)任編輯:jerryxf 2008-06-18

        添加老師微信

        備考咨詢

        加我微信

        摘要:最開(kāi)始的第一句CALL0003是我們用nasm編譯的start.asm所生成的代碼。我們主要目標(biāo)是研究藍(lán)色的C語(yǔ)言的代碼,第一句start.asm所生成的代碼太簡(jiǎn)單,就是調(diào)用e_main函數(shù)。而我們的e_main函數(shù)就是藍(lán)色代碼部分。從C源程序中我們看到,我們?cè)趀_main做的就是一件事情:調(diào)用e_putchar(ch);其中ch是傳給出e_putchar的參數(shù)。MOVAX,000

        最開(kāi)始的第一句CALL 0003是我們用nasm編譯的start.asm所生成的代碼。

        我們主要目標(biāo)是研究藍(lán)色的C語(yǔ)言的代碼,第一句start.asm所生成的代碼太簡(jiǎn)單,就是調(diào)用e_main函數(shù)。而我們的e_main函數(shù)就是藍(lán)色代碼部分。

        從C源程序中我們看到,我們?cè)趀_main做的就是一件事情:調(diào)用e_putchar(ch);其中ch是傳給出e_putchar的參數(shù)。

        MOV AX,000B

        000B就是我們的全局變量ch所在內(nèi)存的地址。C語(yǔ)言會(huì)把所有的全局變量在另一塊內(nèi)存區(qū).C代碼先把ch的地址傳給AX,然后通過(guò)

        PUSH AX

        把AX的值,也就是ch的地址壓入堆棧。然后再

        CALL 0020

        而0020就是e_putchar代碼的地址。通過(guò)這跳語(yǔ)句,計(jì)算機(jī)就跳到e_putchar的代碼部分去執(zhí)行了.我在這里并不給出e_putchar的代碼,因?yàn)槲覀冞@個(gè)案例只是研究C語(yǔ)言中如何傳遞參數(shù)給其它函數(shù)的,并不管e_putchar如何取參數(shù)。下在一個(gè)案例中,我們將研究函數(shù)如何取參數(shù)。

        在這里我得把CALL指令解釋清楚,因?yàn)樵谙聜€(gè)研究函數(shù)如何取參數(shù)的部分中大家可能會(huì)迷惑.CALL XXXX 指令簡(jiǎn)單地或就是

        PUSH IP

        JMP XXXX

        它首先把當(dāng)前的執(zhí)行地址IP壓入堆棧,然后跳轉(zhuǎn)到要CALL的地址去。CALL和RET指令是配套的。RET指令等同于

        POP IP

        也就是回復(fù)CALL前的執(zhí)行地址IP。

        正因?yàn)檫@樣,所以你一旦使用了CALL指令,你的堆棧指針SP就會(huì)自動(dòng)減2。

        POP CX

        是每個(gè)函數(shù)調(diào)用完畢后都有的常用操作。在這里它不起任何作用??赡茏饔镁褪桥cCALL 0020前的PUSH AX像對(duì)應(yīng).這樣堆棧指針SP才能回原。

        好了,簡(jiǎn)單的第一個(gè)案例研究結(jié)束了。雖然就這4跳指令,但是我們已經(jīng)可以看出C語(yǔ)言傳遞參數(shù)方法了??偨Y(jié)起來(lái)就是通過(guò)"MOV AX,參數(shù)地址"把參數(shù)的地址傳到AX,然后"PUSH AX"把參數(shù)的地址壓入堆棧。最后"CALL 函數(shù)地址"轉(zhuǎn)向執(zhí)行要調(diào)用的函數(shù)。最后調(diào)用完后,"POP CX",恢復(fù)堆棧指針SP。

        研究案例二

        工具: Turboc C v2.0,Debug,MASM v5.0,NASM,TASM

        實(shí)例C程序:

        /* example1.c */

        char ch;

        extern void e_putchar(char c);

        int e_main()

        {

        ch=0x44;

        e_putchar(ch);

        }

        [1]  [2]  [3]  

        溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,本網(wǎng)站提供的以上信息僅供參考,如有異議,請(qǐng)考生以權(quán)威部門(mén)公布的內(nèi)容為準(zhǔn)!

        軟考備考資料免費(fèi)領(lǐng)取

        去領(lǐng)取

        !
        咨詢?cè)诰€老師!