• <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++整數、浮點數、結構體的返回值

             

            #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,然后強制轉換為long long,最后賦值給x,
                long long y = (long long)m * n;        //返回值類型為 long long,然后賦值給y,注意強制類型轉換括號的位置,
                

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

            匯編指令:
                004114BC  mov         eax,dword ptr [m] 
                004114BF  imul        eax,dword ptr [n] 
                004114C3  cdq          //數據擴展指令,將雙字數據擴展為四字類型
                //CDQ—Convert Double to Quad (386+),該指令把edx擴展為eax的高位,也就是說變為64位。     
                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浮點加載整數 然后轉換為長雙精度  
                fild是將整數轉化為長雙精FP80壓棧(壓到st0),
                fstp是將彈棧指令,將st0彈出。

            */


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


                
            double k4 = (double)m1/n1;        //返回值類型為double,然后賦值給k4,注意強制類型轉換括號的位置,匯編指令: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 是計數器(counter),是重復(REP)前綴指令和LOOP指令的內定計數器。
            因為sizeof(person) = 28,所以才有mov ecx,7 
            */


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


            //結論:
            /*

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

            浮點數類型:
            計算是通過壓棧的方式,如匯編指令:fild
            返回是通過出棧的方式,如匯編指令:fstp

            結構體類型賦值:
            是通過內存拷貝的方式,如匯編指令:rep movs
            將源值的地址放入esi,
            將目標值的地址放入edi,

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


            結構體類型返回值:
            通過eax將結構體的指針返回
            */

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

            //11111111111111111111110000011000
            //1111101000


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

             

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

            <2012年8月>
            2930311234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            導航

            統計

            常用鏈接

            留言簿(4)

            隨筆分類(378)

            隨筆檔案(329)

            鏈接

            最新隨筆

            搜索

            最新評論

            久久久噜噜噜www成人网| 亚洲综合精品香蕉久久网97| 久久久久久亚洲精品无码| 亚洲国产成人精品女人久久久 | 久久一本综合| 亚洲欧美精品一区久久中文字幕| 久久婷婷人人澡人人爽人人爱| 日日噜噜夜夜狠狠久久丁香五月 | 久久久久久久波多野结衣高潮 | 久久人人爽人人澡人人高潮AV| 久久99精品国产麻豆蜜芽| 久久天天躁狠狠躁夜夜躁2014| 九九久久99综合一区二区| 欧美久久久久久精选9999| 久久精品中文字幕无码绿巨人 | 亚洲精品国产美女久久久| 国产午夜福利精品久久| 无遮挡粉嫩小泬久久久久久久 | 一本一本久久a久久综合精品蜜桃| 97精品伊人久久久大香线蕉| 香蕉久久av一区二区三区| 亚洲国产日韩综合久久精品| 久久精品成人国产午夜| 精品久久久无码人妻中文字幕| 国内精品久久久久久久coent | 国产精品免费久久| 亚洲国产精品热久久| 精品国产一区二区三区久久| 国内精品九九久久精品| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 99久久婷婷免费国产综合精品| 亚洲人成无码久久电影网站| 国产精品永久久久久久久久久| 国产Av激情久久无码天堂| 人妻久久久一区二区三区| 久久精品卫校国产小美女| 手机看片久久高清国产日韩| 久久久久亚洲AV无码专区桃色| 久久成人18免费网站| 久久久91人妻无码精品蜜桃HD | 久久婷婷五月综合97色一本一本|