• <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>
            隨筆-341  評(píng)論-2670  文章-0  trackbacks-0
                這次工作將一個(gè)中間語言的程序翻譯成了匯編,然后再翻譯成機(jī)器碼。這一次產(chǎn)生的匯編比較爛,到時(shí)候做個(gè)窺孔優(yōu)化稍微處理一下就好了。等上層的設(shè)施搞定之后再將這個(gè)中間語言到匯編的程序重寫。下面是一個(gè)菲薄納氣數(shù)列的例子。

                1:中間代碼。這是一個(gè)菲薄納氣函數(shù)的中間指令。
             1 FUNCTION 4 fab STDCALL
             2   PARAM 4 number
             3 BEGIN
             4 BLOCK
             5   VAR 4 compare_result
             6 BEGIN
             7   LT int32s compare_result, int32s number, int32s 2
             8   JBF int32s compare_result, @COMBINE
             9   MOV int32s #RETURN_VALUE, int32s 1
            10   JE @COMBINE
            11   BLOCK @COMBINE
            12     VAR 4 a
            13     VAR 4 b
            14     VAR 4 c
            15   BEGIN
            16     MOV int32s a, int32s 1
            17     MOV int32s b, int32s 1
            18     BLOCK @LOOP
            19     BEGIN
            20       ADD int32s c, int32s a, int32s b
            21       MOV int32s a, int32s b
            22       MOV int32s b, int32s c
            23       SUB int32s number, int32s number, int32s 1
            24       LT int32s compare_result, int32s number, int32s 2
            25       JET int32s compare_result, @LOOP
            26       JB @LOOP
            27     END BLOCK
            28     MOV int32s #RETURN_VALUE, int32s b
            29   END BLOCK
            30 END BLOCK
            31 END FUNCTION

                2:編譯后的匯編代碼(編譯成機(jī)器碼后使用Visual Studio 2008 Team System進(jìn)行反匯編)
             1 000B0000 FF F5            push        ebp  
             2 000B0002 89 E5            mov         ebp,esp 
             3 000B0004 81 EC 1C 00 00 00 sub         esp,1Ch 
             4 000B000A 60               pushad           
             5 000B000B B8 02 00 00 00   mov         eax,2 
             6 000B0010 89 C2            mov         edx,eax 
             7 000B0012 8B 85 08 00 00 00 mov         eax,dword ptr [ebp+00000008h] 
             8 000B0018 31 FF            xor         edi,edi 
             9 000B001A B9 01 00 00 00   mov         ecx,1 
            10 000B001F 39 D0            cmp         eax,edx 
            11 000B0021 0F 4C F9         cmovl       edi,ecx 
            12 000B0024 89 F8            mov         eax,edi 
            13 000B0026 89 85 EC FF FF FF mov         dword ptr [ebp+FFFFFFECh],eax 
            14 000B002C 8B 85 EC FF FF FF mov         eax,dword ptr [ebp+FFFFFFECh] 
            15 000B0032 A9 FF FF FF FF   test        eax,0FFFFFFFFh 
            16 000B0037 0F 84 10 00 00 00 je          000B004D 
            17 000B003D B8 01 00 00 00   mov         eax,1 
            18 000B0042 89 85 FC FF FF FF mov         dword ptr [ebp+FFFFFFFCh],eax 
            19 000B0048 E9 9C 00 00 00   jmp         000B00E9 
            20 000B004D B8 01 00 00 00   mov         eax,1 
            21 000B0052 89 85 F0 FF FF FF mov         dword ptr [ebp+FFFFFFF0h],eax 
            22 000B0058 B8 01 00 00 00   mov         eax,1 
            23 000B005D 89 85 F4 FF FF FF mov         dword ptr [ebp+FFFFFFF4h],eax 
            24 000B0063 8B 85 F4 FF FF FF mov         eax,dword ptr [ebp+FFFFFFF4h] 
            25 000B0069 89 C2            mov         edx,eax 
            26 000B006B 8B 85 F0 FF FF FF mov         eax,dword ptr [ebp+FFFFFFF0h] 
            27 000B0071 01 D0            add         eax,edx 
            28 000B0073 89 85 F8 FF FF FF mov         dword ptr [ebp+FFFFFFF8h],eax 
            29 000B0079 8B 85 F4 FF FF FF mov         eax,dword ptr [ebp+FFFFFFF4h] 
            30 000B007F 89 85 F0 FF FF FF mov         dword ptr [ebp+FFFFFFF0h],eax 
            31 000B0085 8B 85 F8 FF FF FF mov         eax,dword ptr [ebp+FFFFFFF8h] 
            32 000B008B 89 85 F4 FF FF FF mov         dword ptr [ebp+FFFFFFF4h],eax 
            33 000B0091 B8 01 00 00 00   mov         eax,1 
            34 000B0096 89 C2            mov         edx,eax 
            35 000B0098 8B 85 08 00 00 00 mov         eax,dword ptr [ebp+00000008h] 
            36 000B009E 29 D0            sub         eax,edx 
            37 000B00A0 89 85 08 00 00 00 mov         dword ptr [ebp+00000008h],eax 
            38 000B00A6 B8 02 00 00 00   mov         eax,2 
            39 000B00AB 89 C2            mov         edx,eax 
            40 000B00AD 8B 85 08 00 00 00 mov         eax,dword ptr [ebp+00000008h] 
            41 000B00B3 31 FF            xor         edi,edi 
            42 000B00B5 B9 01 00 00 00   mov         ecx,1 
            43 000B00BA 39 D0            cmp         eax,edx 
            44 000B00BC 0F 4C F9         cmovl       edi,ecx 
            45 000B00BF 89 F8            mov         eax,edi 
            46 000B00C1 89 85 EC FF FF FF mov         dword ptr [ebp+FFFFFFECh],eax 
            47 000B00C7 8B 85 EC FF FF FF mov         eax,dword ptr [ebp+FFFFFFECh] 
            48 000B00CD A9 FF FF FF FF   test        eax,0FFFFFFFFh 
            49 000B00D2 0F 85 05 00 00 00 jne         000B00DD 
            50 000B00D8 E9 86 FF FF FF   jmp         000B0063 
            51 000B00DD 8B 85 F4 FF FF FF mov         eax,dword ptr [ebp+FFFFFFF4h] 
            52 000B00E3 89 85 FC FF FF FF mov         dword ptr [ebp+FFFFFFFCh],eax 
            53 000B00E9 8B 85 FC FF FF FF mov         eax,dword ptr [ebp+FFFFFFFCh] 
            54 000B00EF 89 EC            mov         esp,ebp 
            55 000B00F1 8F C5            pop         ebp  
            56 000B00F3 C2 04 00         ret         4 

                附上Visual Studio 2008 Team System的截圖:

                最后是執(zhí)行結(jié)果(將函數(shù)指針拿出來,然后使用不同的參數(shù)進(jìn)行調(diào)用):

                接下來就是漫長(zhǎng)的調(diào)試工作了……
            posted on 2009-04-14 00:11 陳梓瀚(vczh) 閱讀(2737) 評(píng)論(9)  編輯 收藏 引用 所屬分類: JIT

            評(píng)論:
            # re: JIT腳本引擎:成功將第一個(gè)腳本編譯成機(jī)器碼 2009-04-14 00:33 | Lilo
            將函數(shù)指針拿出來,然后使用不同的參數(shù)進(jìn)行調(diào)用

            難怪還看不到call printf...  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:成功將第一個(gè)腳本編譯成機(jī)器碼 2009-04-14 02:42 | kevin.c
            這個(gè)強(qiáng)悍 根本看不懂  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:成功將第一個(gè)腳本編譯成機(jī)器碼 2009-04-14 07:44 | 肥仔
            狄公真乃神人也!  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:成功將第一個(gè)腳本編譯成機(jī)器碼 2009-04-14 17:15 | sapielion
            牛,能不能給一套代碼,讓我們學(xué)習(xí)學(xué)習(xí),cqm21@yahoo.com.cn  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:成功將第一個(gè)腳本編譯成機(jī)器碼 2009-04-14 19:26 | 陳梓瀚(vczh)
            @sapielion
            正在測(cè),給你有bug的代碼看是沒意義的。  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:成功將第一個(gè)腳本編譯成機(jī)器碼 2009-04-14 19:52 | 巫云
            膜拜1分鐘。
            能推薦點(diǎn)學(xué)習(xí)匯編的資料嗎?新一點(diǎn)的。  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:成功將第一個(gè)腳本編譯成機(jī)器碼 2009-04-14 20:50 | 陳梓瀚(vczh)
            @巫云
            Intel主頁上有匯編手冊(cè)下載。  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:成功將第一個(gè)腳本編譯成機(jī)器碼[未登錄] 2009-09-16 05:08 | 小強(qiáng)
            "2:編譯后的匯編代碼(編譯成機(jī)器碼后使用Visual Studio 2008 Team System進(jìn)行反匯編)"

            不知道樓主使用什么工具將你的轉(zhuǎn)換后的匯編代碼編譯的呢?  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:成功將第一個(gè)腳本編譯成機(jī)器碼 2009-09-23 20:14 | 陳梓瀚(vczh)
            @小強(qiáng)
            我自己寫的工具  回復(fù)  更多評(píng)論
              
            久久精品国产一区二区三区日韩| 国产精品女同一区二区久久| 久久93精品国产91久久综合| 成人午夜精品久久久久久久小说| 狠狠色伊人久久精品综合网| 亚洲国产成人久久一区久久| 色欲综合久久中文字幕网| 狠狠色婷婷综合天天久久丁香 | 亚洲国产精品综合久久网络| 无夜精品久久久久久| 欧美喷潮久久久XXXXx| 99久久亚洲综合精品成人| 久久婷婷五月综合97色直播| 久久人人爽人人爽人人AV| 国产L精品国产亚洲区久久| 久久久精品人妻一区二区三区蜜桃| 精品免费久久久久久久| 久久综合狠狠综合久久97色| 久久r热这里有精品视频| 国产精品久久久久蜜芽| 国产ww久久久久久久久久| 人妻精品久久久久中文字幕69 | 日韩AV毛片精品久久久| 久久精品免费观看| 久久精品国产99久久无毒不卡| 亚洲精品综合久久| 久久精品视屏| 精品久久人人妻人人做精品| 国产精品久久久久久福利69堂| 少妇高潮惨叫久久久久久| 伊人久久大香线蕉综合5g| 精品久久久久久无码中文野结衣| 91久久精一区二区三区大全| 久久亚洲日韩精品一区二区三区| 国产精品久久婷婷六月丁香| 亚洲午夜福利精品久久| 亚洲国产精品无码久久青草 | 99999久久久久久亚洲| 色婷婷综合久久久中文字幕| 中文字幕人妻色偷偷久久| 久久人人爽人人爽人人片AV不|