• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天下

            記錄修行的印記

            C++整數(shù)、浮點(diǎn)數(shù)、結(jié)構(gòu)體的返回值

             

            #include "stdafx.h"


            struct person{
                
            int age;
                
            int sex;
                
            char name[20];
            };

            struct person GetPerson(int age,int sex,char* name)
            {
                
            struct person p;
                p.age 
            = age;
                p.sex 
            = sex;
                strcpy(p.name,name);
                
            return p;
            }

            int main()
            {
                
            int m = 0x7ffff123;
                
            int n = 0x7ffff456;
                
            int k = 0x7fffffff;

                
            //匯編指令:imul,mul
                long long x = (long long)(m * n);    //返回值類型為 int,然后強(qiáng)制轉(zhuǎn)換為long long,最后賦值給x,
                long long y = (long long)m * n;        //返回值類型為 long long,然后賦值給y,注意強(qiáng)制類型轉(zhuǎn)換括號(hào)的位置,
                

                
            long long z = m * n;                //返回值類型為 int,然后賦值給x.
            /*

            匯編指令:
                004114BC  mov         eax,dword ptr [m] 
                004114BF  imul        eax,dword ptr [n] 
                004114C3  cdq          //數(shù)據(jù)擴(kuò)展指令,將雙字?jǐn)?shù)據(jù)擴(kuò)展為四字類型
                //CDQ—Convert Double to Quad (386+),該指令把edx擴(kuò)展為eax的高位,也就是說(shuō)變?yōu)?4位。     
                004114C4  mov         dword ptr [z],eax 
                004114C7  mov         dword ptr [ebp-4Ch],edx 
            */

                printf(
            "m = %d,n = %d \n",m,n);
                printf(
            "x = %lld\n",x);
                printf(
            "y = %lld\n",y);
                printf(
            "z = %lld\n",z);





                
            int m1 = 8;
                
            int n1 = 3;
                
            int k1 = m1/n1;

                
            double k2 = m1/n1;        //返回值類型為 int,然后賦值給k2,匯編指令:idiv
            /*

            匯編指令:
                0041155E  mov         eax,dword ptr [m1] 
                00411561  cdq              
                00411562  idiv        eax,dword ptr [n1] 
                00411565  mov         dword ptr [ebp-1F4h],eax 
                0041156B  fild        dword ptr [ebp-1F4h] 
                00411571  fstp        qword ptr [k2] 

                fild和fstp都是x87指令 
                fild浮點(diǎn)加載整數(shù) 然后轉(zhuǎn)換為長(zhǎng)雙精度  
                fild是將整數(shù)轉(zhuǎn)化為長(zhǎng)雙精FP80壓棧(壓到st0),
                fstp是將彈棧指令,將st0彈出。

            */


                
            double k3 = (double)(m1/n1);    //返回值類型為 int,然后強(qiáng)制轉(zhuǎn)換為double,最后賦值給k3,匯編指令:idiv


                
            double k4 = (double)m1/n1;        //返回值類型為double,然后賦值給k4,注意強(qiáng)制類型轉(zhuǎn)換括號(hào)的位置,匯編指令:fidiv
            /*

                匯編指令:
                00411590  fild        dword ptr [m1] 
                00411593  fidiv       dword ptr [n1] 
                00411596  fstp        qword ptr [k4] 
            */

                printf(
            "k1=%d \r\n",k1);
                printf(
            "k2=%f \r\n",k2);
                printf(
            "k3=%f \r\n",k3);
                printf(
            "k4=%f \r\n",k4);

                
            char l1 = 127;
                
            char l2 = 122;
                
            int  l3 = l1* l2;
            /*
            匯編指令:
                0041162E  movsx       eax,byte ptr [l1] 
                00411635  movsx       ecx,byte ptr [l2] 
                0041163C  imul        eax,ecx 
                0041163F  mov         dword ptr [l3],eax 
            */



                
            char l4 = l1* l2;
            /*
                匯編指令:
                00411645  movsx       eax,byte ptr [l1] 
                0041164C  movsx       ecx,byte ptr [l2] 
                00411653  imul        eax,ecx 
                00411656  mov         byte ptr [l4],al 
            */




                
            int l5 = l1/l2;
                
            int l6 = double(l1)/l2;


                
            long double k5 = l1* l2;
            /*
                匯編指令:
                004116A6  movsx       eax,byte ptr [l1] 
                004116AD  movsx       ecx,byte ptr [l2] 
                004116B4  imul        eax,ecx 
                004116B7  mov         dword ptr [ebp-1F4h],eax 
                004116BD  fild        dword ptr [ebp-1F4h] 
                004116C3  fstp        qword ptr [k5] 
            */


                printf(
            "l3=%d \r\n",l3);
                printf(
            "l4=%d \r\n",l4);
                printf(
            "k4=%lf \r\n",k5);

                
            long long o1 = 0xff34567812345677;    
                
            long long o2 = 0xab34567834125615;
                
            long long o3 = o1 * o2;    //溢出

                
            int age = 5;
                
            int sex = 1;
                
            char name[20= "Aaron";

                
            struct person p1 = {5,1,"Aaron"};
                
            struct person p2;
                
            struct person* pp1 = &p1;
                
            struct person* pp2 = &p2;
                p2
            = p1;
            /*
            匯編指令:
            00414348  mov         ecx,7 
            0041434D  lea         esi,[ebp-188h] 
            00414353  lea         edi,[ebp-1ACh] 
            00414359  rep movs    dword ptr es:[edi],dword ptr [esi] 

            //ecx 是計(jì)數(shù)器(counter),是重復(fù)(REP)前綴指令和LOOP指令的內(nèi)定計(jì)數(shù)器。
            因?yàn)閟izeof(person) = 28,所以才有mov ecx,7 
            */


                
            struct person p3;
                p3
            = GetPerson(age,sex,name);


            //結(jié)論:
            /*

            整數(shù)類型:
                小于等于4字節(jié)的返回值放在eax中,
                8字節(jié)的返回值放在edx + eax中,其中edx為高位,eax為低位.

            浮點(diǎn)數(shù)類型:
            計(jì)算是通過(guò)壓棧的方式,如匯編指令:fild
            返回是通過(guò)出棧的方式,如匯編指令:fstp

            結(jié)構(gòu)體類型賦值:
            是通過(guò)內(nèi)存拷貝的方式,如匯編指令:rep movs
            將源值的地址放入esi,
            將目標(biāo)值的地址放入edi,

            00414393  lea         esi,[ebp-2D8h] 
            00414399  lea         edi,[ebp-1D0h] 
            0041439F  rep movs    dword ptr es:[edi],dword ptr [esi] 


            結(jié)構(gòu)體類型返回值:
            通過(guò)eax將結(jié)構(gòu)體的指針返回
            */

                system(
            "pause");
                
            return 0;
            }
            //111111111111111111111111111111
            //00000000000000000000000000000001
            //
            //111111111111111111001010111100
            //10000000101011010101110111000010
            //取反加一 1111111010100101010001000111110
            //11111001111111111111111111111110000011000

            //11111111111111111111110000011000
            //1111101000


            //11111010000000000000000000000000000000000 = 0
            //00000000000000000000000000000000
            //
            //1111111111111111111110000011000

             

            posted on 2013-03-01 10:16 天下 閱讀(1099) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++ 、匯編語(yǔ)言

            <2012年6月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(4)

            隨筆分類(378)

            隨筆檔案(329)

            鏈接

            最新隨筆

            搜索

            最新評(píng)論

            国产亚洲精品自在久久| 亚洲国产成人乱码精品女人久久久不卡| 久久综合伊人77777| 亚洲精品久久久www| 香蕉久久av一区二区三区| 97久久天天综合色天天综合色hd | 一本色综合久久| 人妻精品久久久久中文字幕69| 97精品伊人久久久大香线蕉| 色综合久久88色综合天天 | 久久综合狠狠综合久久综合88| 久久精品无码一区二区日韩AV| 青草国产精品久久久久久| 久久免费视频6| 亚洲国产精品一区二区久久| 久久婷婷五月综合成人D啪| 精品久久久久久久久久中文字幕 | 精品久久久久久无码国产| 久久精品无码专区免费青青| 99久久做夜夜爱天天做精品| 亚洲综合婷婷久久| 久久精品亚洲一区二区三区浴池| 亚洲а∨天堂久久精品| 久久精品这里只有精99品| 66精品综合久久久久久久| jizzjizz国产精品久久| 久久久久久无码Av成人影院| 久久免费看黄a级毛片| 免费精品国产日韩热久久| 欧美一级久久久久久久大片| 久久精品国产精品亚洲| 88久久精品无码一区二区毛片 | 免费无码国产欧美久久18| 久久久久无码精品| 久久久WWW成人免费毛片| 美女写真久久影院| 狠色狠色狠狠色综合久久| 久久久久国产一级毛片高清版| 国产精品久久成人影院| 久久噜噜电影你懂的| 超级碰久久免费公开视频|