棧式虛擬機器中間代碼編譯為x86指令

來源:互聯網
上載者:User

棧式虛擬機器比較好實現,同時指令也較為簡單,類似risc

 

假設虛擬機器指令

push i ;//立即數入棧

add  //棧裡面最近2元素相加,pop 2後,結果壓棧

call  //調用棧頂id指向的函數

 

//指令碼

rotate(0,0,20+time()); //繞0,0旋轉20+目前時間

 

編譯為中間代碼;//具體過程參考編譯原理

push time

call

push 20

add

push 0

push 0

push rotate

call

 

 

現在的目的是把中間代碼翻譯為x86指令,然後就可以直接在cpu上面運行。

定義代碼轉換模板,右邊是asm,程式裡面使用機器碼

push i               push i

 

call                   pop eax

                         mov ebx,fun_table

                         call [eax+ebx]

                         push eax

 

add                   pop eax

                         pop ebx

                         add

                         push eax

 

通過這個模板,就可以把中間碼轉換為x86指令

上面的代碼轉換為

1

 push time

2

pop eax

mov ebx,fun_table

call [eax+ebx]

push eax

3

push 20

4

pop eax

pop ebx

add

push eax

5

push 0

6

push 0

7

push rotete

8

pop eax

mov ebx,fun_table

call [eax+ebx]

push eax

 

 

最後,可以再稍做最佳化.

 

主要有2點最佳化

push xx

pop eax

最佳化為mov eax,xx

push eax

pop eax

直接去掉

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.