青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

loop_in_codes

低調做技術__歡迎移步我的獨立博客 codemaro.com 微博 kevinlynx

基于棧的虛擬機的實現

上次的編譯原理練習中,生成的目標代碼是別人寫的一個基于寄存器的簡單虛擬機。這

回這個簡單的基于棧的虛擬機,純碎是為了彌補上回的練習不足。

基于寄存器(register based)的虛擬機和基于棧(stack based)的虛擬機主要的不同在于

對指令運算的中間值的保存方式。這些中間值包括各種運算的結果值,傳給各個指令的參

數等等。前者一般會設置幾個寄存器,如累加寄存器;后者則沒有寄存器,只有一個用來

保存這些值的棧。例如,這里我實現的SM(stack based machine)中的ADD指令:

ADD:從棧中依次彈出兩個數a和b,然后將b+a壓棧(b是左操作數)。基于這樣一個方

式,SM中大部分指令都不需要操作數,其操作數都直接從棧頂取。因為這個虛擬機僅僅是

用于上回設計的簡單語言的運行,即沒有函數、只有數字類型、有if和while。在這回練習中

我甚至把邏輯運算符給閹割了,只保留了大于小于之類的關系運算符。以下是該語言計算階

乘的例子:

read x;
if( x > 0 )
{
fac = 1;
while( x > 0 )
{
  fac = fac * x;
  x = x - 1;
}
write fac;
}
else
{
write 0;
}

基本上同《編譯原理與實踐》里的例子一樣,這樣省得我去琢磨語言文法。

不過,SM中還是有一個寄存器,即指令指針寄存器(pc),永遠指向將要執行的指令。在實現中,

所有指令都被保存一個數組里,所以pc就是一個指向數組索引的整數值。

SM中有一個簡單的內存,只用于保存程序中的全局變量(只有全局變量)。同樣,這個虛擬的

內存也被簡單地用一個數組來實現,所以,指令中的所有地址,都是數組索引值。

SM的代碼文件直接就是指令序列的二進制表示。在這個二進制文件中,內容依次為:操作碼(1

字節),操作數(4字節,如果有的話),操作碼,操作數,。。。SM讀取這樣的文件,將這些

指令放進指令數組,然后逐條解釋執行,直到遇到空指令。

代碼中的test是上面簡單提到的編程語言的編譯程序,該程序將源代碼編譯為SM可執行的二進制

文件(sm后綴)。為了方便調試,SM本身可以根據命令行參數輸出二進制文件對應的反匯編代碼,

這可以方便我調試編譯程序的代碼生成是否正常工作。同時,當初為了測試SM的正確性,還寫了

個簡單的匯編程序(sasm),可以把SM的匯編代碼轉換為二進制文件。

這回我特地在文法中間插入action丟給yacc處理,在賦值語句中一切正常。但是在if中yacc依然

提示警告,看起來應該跟if中的懸掛else二義性有關系。不過通過添加空的文法符號,居然解決了。

不清楚為什么上回死活有問題,詭異了。

 

下載SM

posted on 2010-04-15 19:56 Kevin Lynx 閱讀(7826) 評論(0)  編輯 收藏 引用 所屬分類: 編譯原理

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产欧美日韩麻豆91| 中文精品在线| 欧美日韩在线播放三区| 久久久亚洲成人| 国产精品免费在线| 亚洲美女av电影| 亚洲高清毛片| 久久精品国产精品| 久久精品麻豆| 国产主播一区二区三区| 亚洲欧美日韩天堂| 欧美一区二区成人6969| 国产精品久久久久久久午夜片| 99日韩精品| 一区二区三区黄色| 日韩一区二区精品葵司在线| 一本色道久久综合亚洲二区三区| 欧美日本不卡高清| 日韩视频免费观看高清完整版| 亚洲免费精彩视频| 欧美日一区二区三区在线观看国产免| 亚洲日本成人| 日韩网站在线观看| 欧美日韩视频在线观看一区二区三区 | 欧美在线亚洲| 久久久国产午夜精品| 国模精品一区二区三区| 久久蜜桃香蕉精品一区二区三区| 欧美电影资源| 日韩亚洲一区二区| 欧美四级电影网站| 亚洲欧美成人| 久久女同互慰一区二区三区| 曰韩精品一区二区| 欧美成人精品一区二区| 亚洲精品资源美女情侣酒店| 亚洲女性裸体视频| 激情五月婷婷综合| 欧美激情视频在线播放| 亚洲视频你懂的| 久久夜色精品一区| 日韩亚洲欧美精品| 国产精品久久久久久久久久尿| 亚洲欧美日韩系列| 亚洲福利精品| 欧美一区二区性| 激情亚洲网站| 欧美精品免费在线| 亚洲视频国产视频| 久久一区二区三区四区五区| 亚洲日本欧美天堂| 国产精品女人久久久久久| 久久精品91久久香蕉加勒比| 亚洲精品国久久99热| 欧美中文字幕在线视频| 亚洲国产欧美一区| 国产伦精品一区二区三区高清版| 久久久99久久精品女同性| 亚洲精品日韩综合观看成人91| 久久高清国产| 日韩一级二级三级| 黄色影院成人| 国产精品二区影院| 免费国产一区二区| 亚洲欧美日韩视频二区| 最新国产拍偷乱拍精品| 久久成人在线| 亚洲无线视频| 亚洲国产成人精品视频| 国产精品专区第二| 欧美精选在线| 久久美女艺术照精彩视频福利播放| 日韩一级大片| 欧美大片在线观看一区| 欧美在线啊v一区| 一本久道综合久久精品| 亚洲成人在线观看视频| 国产精品专区一| 欧美视频在线观看| 欧美大片免费看| 久久永久免费| 久久精品五月婷婷| 羞羞漫画18久久大片| 亚洲一区二区高清| 亚洲视频网站在线观看| 亚洲精品视频免费在线观看| 亚洲电影成人| 欧美黄色大片网站| 欧美激情亚洲激情| 欧美激情导航| 亚洲成色777777女色窝| 蜜臀av一级做a爰片久久| 久久久久中文| 久久婷婷蜜乳一本欲蜜臀| 欧美一区二区网站| 欧美在线在线| 午夜视频一区二区| 亚洲影音一区| 亚洲欧美日韩视频二区| 亚洲伊人观看| 西瓜成人精品人成网站| 亚洲综合另类| 亚洲欧美成人一区二区在线电影| 99re66热这里只有精品4| 亚洲精品在线免费观看视频| 亚洲人成高清| 亚洲精选视频在线| 亚洲美女一区| 一本大道久久a久久精二百| 亚洲精品视频免费| 99精品福利视频| 9l国产精品久久久久麻豆| 日韩视频一区二区在线观看 | 欧美国产日韩免费| 欧美aa在线视频| 欧美二区在线看| 欧美精品成人一区二区在线观看| 牛牛影视久久网| 欧美看片网站| 国产精品v欧美精品v日韩精品| 国产精品久久久久毛片软件| 国产欧美精品一区aⅴ影院| 国产有码一区二区| 一区久久精品| 亚洲精品乱码久久久久久久久| 日韩一级黄色av| 亚洲女ⅴideoshd黑人| 欧美有码在线观看视频| 久久伊人精品天天| 欧美激情一区二区三区成人| 亚洲茄子视频| 午夜精品福利视频| 每日更新成人在线视频| 欧美日韩久久| 国产噜噜噜噜噜久久久久久久久| 国产一区二区欧美| 亚洲国产一区二区a毛片| 一区二区三区四区精品| 欧美一区二区网站| 欧美激情免费观看| 中文日韩电影网站| 久久免费黄色| 欧美性开放视频| 国产亚洲一区精品| 99精品热视频只有精品10| 午夜在线成人av| 欧美福利视频网站| 亚洲在线播放电影| 欧美.日韩.国产.一区.二区| 国产精品v一区二区三区| 国内精品亚洲| av成人免费观看| 久久久av网站| 亚洲精品一二三| 久久久久这里只有精品| 欧美视频手机在线| 在线成人h网| 亚洲视频中文| 欧美成人在线免费观看| 亚洲午夜电影在线观看| 美女诱惑一区| 国产日韩欧美亚洲一区| 亚洲美女福利视频网站| 久久久精品日韩| 一区二区三区欧美在线| 免费观看一级特黄欧美大片| 国产日韩精品在线播放| 日韩午夜在线电影| 久久综合伊人77777| 在线视频亚洲一区| 欧美成人在线免费观看| 国产主播一区二区三区| 国产午夜精品久久久久久免费视| 最新国产成人av网站网址麻豆| 欧美与欧洲交xxxx免费观看| 99国内精品| 欧美精品1区2区| 亚洲国产精品www| 久久成年人视频| 国产精品99久久不卡二区 | 99视频精品| 蜜桃久久精品一区二区| 国内在线观看一区二区三区| 午夜精品久久久久久久久久久久 | 欧美一区二区三区日韩| 99re热精品| 欧美精品一区二区三区久久久竹菊 | 国内揄拍国内精品少妇国语| 午夜精品99久久免费| aⅴ色国产欧美| 欧美日韩视频| 亚洲午夜精品网| 一区二区三区免费网站| 国产精品99一区| 亚洲午夜小视频| 一区二区成人精品| 国产精品区免费视频| 欧美一区二区播放| 午夜国产不卡在线观看视频| 国产精品女人毛片|