[畢業(yè)論文]Linux平臺(tái)下的MIX匯編器設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
[畢業(yè)論文]Linux平臺(tái)下的MIX匯編器設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
[畢業(yè)論文]Linux平臺(tái)下的MIX匯編器設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
[畢業(yè)論文]Linux平臺(tái)下的MIX匯編器設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
[畢業(yè)論文]Linux平臺(tái)下的MIX匯編器設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、河南大學(xué)2007屆本科畢業(yè)論文linux平臺(tái)下的mix匯編器設(shè)計(jì)與實(shí)現(xiàn)the design and realization of mix compiler under linux platform論文作者姓名:朱選偉 所在學(xué)院:計(jì)算機(jī)與信息工程學(xué)院 所學(xué)專業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 導(dǎo)師姓名職稱:陳志國(guó)(教授)、杜瑩(助教) 論文完成時(shí)間:2007年5月20日 2007年5月20日河南大學(xué)2007屆畢業(yè)論文(設(shè)計(jì)、創(chuàng)作)開題報(bào)告(由學(xué)生本人認(rèn)真填寫)學(xué)號(hào)02023191姓名朱選偉導(dǎo)師姓名職稱陳志國(guó)(教授)杜瑩(助教)開題時(shí)間2006年12月1日課題題目linux下的mix匯編器的設(shè)計(jì)與實(shí)現(xiàn)課題來(lái)源導(dǎo)

2、師指定 自定 其他來(lái)源課題的目的、意義以及和本課題有關(guān)的國(guó)內(nèi)外現(xiàn)狀分析:1、目的:在linux平臺(tái)下實(shí)現(xiàn)計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)一書中描述的mix匯編器的功能。2、意義:能夠更好地學(xué)習(xí)計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)一書,并對(duì)虛擬機(jī)技術(shù)有較好的理解。3、現(xiàn)狀:在windows平臺(tái)下有相關(guān)的軟件mixbuider,但在linux平臺(tái)下并沒(méi)有相關(guān)的軟件存在。研究目標(biāo)、研究?jī)?nèi)容和準(zhǔn)備解決的問(wèn)題:1、目標(biāo):在linux操作系統(tǒng)平臺(tái)下完成mix虛擬機(jī)的匯編器。2、內(nèi)容:linux操作系統(tǒng)平臺(tái)的編程環(huán)境熟悉,掌握虛擬機(jī)技術(shù)以及匯編技術(shù)。3、準(zhǔn)備解決的問(wèn)題:匯編語(yǔ)法問(wèn)題,虛擬機(jī)的實(shí)現(xiàn)問(wèn)題以及l(fā)inux編程的基礎(chǔ)知識(shí)熟悉。擬采取

3、的方法、技術(shù)或設(shè)計(jì)(開發(fā))工具:linux操作系統(tǒng),c+編程語(yǔ)言,gnu匯編器,虛擬機(jī)技術(shù),匯編原理預(yù)期成果:1、畢業(yè)設(shè)計(jì)成果linux平臺(tái)下的mix匯編器軟件2、畢業(yè)論文linux平臺(tái)下的mix匯編器設(shè)計(jì)與實(shí)現(xiàn)進(jìn)度計(jì)劃:2006.12.1 - 2007.4.1:查找資料、搜集相關(guān)素材2007.4.2 - 2007.4.11:完成linux平臺(tái)的熟悉工作2007.4.12 - 2007.4.21:完成匯編程序部分的設(shè)計(jì)2007.4.22 - 2007.4.30:完成機(jī)器指令的解釋執(zhí)行部分的設(shè)計(jì)2007.5.1 - 2007.5.15:整理資料、撰寫畢業(yè)論文2007.5.16 - 2007.5.

4、25:根據(jù)導(dǎo)師要求,完善畢業(yè)設(shè)計(jì)和論文指導(dǎo)教師對(duì)選題報(bào)告的意見:同意開題 指導(dǎo)教師簽名: 2006年12月1日河南大學(xué)2007屆畢業(yè)論文(設(shè)計(jì)、創(chuàng)作)任務(wù)書(由學(xué)生本人認(rèn)真填寫)學(xué)號(hào)02023191姓名朱選偉導(dǎo)師姓名陳志國(guó),杜瑩任務(wù)書起止日期2006年12月8日 至 2007年5月20日論文提要: 論文將要介紹四個(gè)方面的內(nèi)容:1、linux下編譯的一般過(guò)程、makefile文件。2、開發(fā)環(huán)境以及基礎(chǔ)知識(shí),包括mix系統(tǒng)及匯編語(yǔ)言以及虛擬機(jī)技術(shù)。3、本系統(tǒng)的總體規(guī)劃及設(shè)計(jì)。4、系統(tǒng)具體設(shè)計(jì)與實(shí)現(xiàn)。課題任務(wù)要求:1、熟悉linux操作系統(tǒng)的編程環(huán)境,熟悉基本的編程操作。2、學(xué)習(xí)mix匯編語(yǔ)言。3、

5、掌握虛擬機(jī)技術(shù)以及匯編原理的相關(guān)知識(shí)。4、利用前面的知識(shí)開發(fā)出具體系統(tǒng)。主要參考文獻(xiàn):1 錢能等編著,c+程序設(shè)計(jì)教程,清華大學(xué)出版社,1999年4月 2 d.e.knuth著,the art of computer programming,volume 1 fundamental algorithms,第3版,清華大學(xué)出版社,2002年9月3 陳火旺等著,程序設(shè)計(jì)語(yǔ)言編譯原理,第三版,國(guó)防工業(yè)出版社,2001年1月4 richard m.stallman著,using and porting the gnu compiler collection, free software foundat

6、ion,1998年5 andrew s.tanenbaum著,王鵬、尤晉元等譯,操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),電子工業(yè)出版社,1998年河南大學(xué)2007屆畢業(yè)設(shè)計(jì)(論文、創(chuàng)作)中期檢查表學(xué)院名稱:計(jì)算機(jī)與信息工程學(xué)院題目名稱linux平臺(tái)下的mix匯編器的設(shè)計(jì)與實(shí)現(xiàn)學(xué)號(hào)02023191所學(xué)專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)指導(dǎo)教師姓 名陳志國(guó)杜瑩姓名朱選偉一、畢業(yè)設(shè)計(jì)進(jìn)展情況1、基本完成主體框架的設(shè)計(jì),完成了小部分的編碼工作。2、對(duì)linux編程環(huán)境有了一定了解,對(duì)虛擬機(jī)技術(shù)及匯編技術(shù)有了一定的了解。3、具體實(shí)現(xiàn)大部分沒(méi)有完成。二、存在問(wèn)題1、總體實(shí)現(xiàn)并不理想,對(duì)虛擬機(jī)的了解不深而直接導(dǎo)致整體結(jié)構(gòu)分工不理想。2、對(duì)l

7、inux的編程環(huán)境掌握并不熟練,導(dǎo)致編程過(guò)程頻頻受阻。三、下一階段的研究方法或設(shè)計(jì)思路加快學(xué)習(xí)虛擬機(jī)技術(shù)并且重新審視主體模塊構(gòu)成。并集中精力放在主要掌握l(shuí)inux的基本編程知識(shí)。四、指導(dǎo)教師對(duì)學(xué)生設(shè)計(jì)(論文、創(chuàng)作)進(jìn)展等方面的評(píng)語(yǔ) 該生較好地完成了基本模塊的劃分和編碼工作,但是進(jìn)度稍慢,各部分的實(shí)現(xiàn)和功能調(diào)試仍需認(rèn)真完成。 指導(dǎo)教師簽字: 2007年4月10日此表除第四項(xiàng)外由學(xué)生填寫指導(dǎo)教師簽名河南大學(xué)2007屆畢業(yè)論文(設(shè)計(jì)、創(chuàng)作)綜合成績(jī)表(一)學(xué)院名稱:計(jì)算機(jī)與信息工程學(xué)院學(xué) 號(hào)02023191姓名朱選偉專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)指導(dǎo)教師陳志國(guó)(教授)、杜瑩(助教)綜合得分89論文題目linu

8、x平臺(tái)下的mix匯編器的設(shè)計(jì)與實(shí)現(xiàn)指導(dǎo)教師評(píng)語(yǔ)及得分指導(dǎo)教師評(píng)語(yǔ)該生較好地完成了該匯編器的設(shè)計(jì)與實(shí)現(xiàn),論文撰寫認(rèn)真,選題新穎。評(píng)分項(xiàng)目分值指導(dǎo)教師對(duì)畢業(yè)論文(設(shè)計(jì)、創(chuàng)作)評(píng)分撰寫開題報(bào)告、文獻(xiàn)綜述15調(diào)查研究查閱整理資料10學(xué)習(xí)態(tài)度與規(guī)范要求10數(shù)據(jù)處理、文字表達(dá)10論文(設(shè)計(jì)、創(chuàng)作)質(zhì)量和創(chuàng)新意識(shí)55合計(jì)100得分138785389指導(dǎo)教師簽名 2007年5月20日評(píng)閱教師評(píng)語(yǔ)及評(píng)分評(píng)閱教師評(píng)語(yǔ)該生選題新穎,論文內(nèi)容翔實(shí),但軟件技術(shù)上也并不很成熟,希望以后多加努力。評(píng)分項(xiàng)目分值評(píng)閱畢業(yè)論文(設(shè)計(jì)、創(chuàng)作)評(píng)分撰寫開題報(bào)告、文獻(xiàn)綜述15調(diào)查研究查閱整理資料10學(xué)習(xí)態(tài)度與規(guī)范要求10數(shù)據(jù)處理、文字

9、表達(dá)10論文(設(shè)計(jì)、創(chuàng)作)質(zhì)量和創(chuàng)新意識(shí)55合計(jì)100得分128785388評(píng)閱教師簽名 2007年5月21日此表由教師填寫河南大學(xué)2007屆畢業(yè)論文(設(shè)計(jì)、創(chuàng)作)綜合成績(jī)表(二)學(xué)號(hào)02023191姓名朱選偉所在學(xué)院計(jì)算機(jī)與信息工程學(xué)院答辯委員會(huì)評(píng)語(yǔ)及評(píng)分答辯委員會(huì)評(píng)語(yǔ) 答辯委員簽字: 2007年5月26日評(píng)分 項(xiàng)目 分值論文答辯小組評(píng)分答辯情況論文質(zhì)量合計(jì)(100)內(nèi)容表達(dá)情況(15)答辯問(wèn)題情況(25)規(guī)范要求與文字表達(dá)(20)論文(設(shè)計(jì)、創(chuàng)作)質(zhì)量和創(chuàng)新意識(shí)(40)得分1223183689答辯委員會(huì)主任簽字: 2007年5月26日畢業(yè)論文(設(shè)計(jì)、創(chuàng)作)成績(jī)綜合評(píng)定: 89 分綜合評(píng)定等

10、級(jí):良備注:一、論文的質(zhì)量評(píng)定,應(yīng)包括對(duì)論文的語(yǔ)言表達(dá)、結(jié)構(gòu)層次、邏輯性理論分析、設(shè)計(jì)計(jì)算、分析和概括能力及在論文中是否有新的見解或創(chuàng)新性成果等做出評(píng)價(jià)。從論文來(lái)看學(xué)生掌握本專業(yè)基礎(chǔ)理論和基本技能的程度。二、成績(jī)?cè)u(píng)定采用結(jié)構(gòu)評(píng)分法,即由指導(dǎo)教師、評(píng)閱教師和答辯委員會(huì)分別給分(以百分計(jì)),評(píng)閱教師得分乘以20%加上指導(dǎo)教師得分乘以20%加上答辯委員會(huì)得分乘以60%即綜合成績(jī)。評(píng)估等級(jí)按優(yōu)、良、中、差劃分,優(yōu)90-100分;良76-89分;中60-75分;差60分以下。三、評(píng)分由專業(yè)教研室或院組織專門評(píng)分小組(不少于5人),根據(jù)指導(dǎo)教師和答辯委員會(huì)意見決定每個(gè)學(xué)生的分?jǐn)?shù),在有爭(zhēng)議時(shí),應(yīng)由答辯委員會(huì)

11、進(jìn)行表決。四、畢業(yè)論文答辯工作結(jié)束后,各院應(yīng)于6月20日前向教務(wù)處推薦優(yōu)秀論文以匯編成冊(cè),推薦的篇數(shù)為按當(dāng)年學(xué)院畢業(yè)生人數(shù)的1.5%篇。五、各院亦可根據(jù)本專業(yè)的不同情況,制定相應(yīng)的具有自己特色的內(nèi)容。須報(bào)教務(wù)處備案。六、書寫格式要求:1、目錄;2、內(nèi)容提要須書寫200左右漢字,開題報(bào)告(文科除外)的內(nèi)容要根據(jù)不同專業(yè)的課題任務(wù)要求,闡述查閱文獻(xiàn)、文案論證、解題思路、工作步驟等;3、正文(含引言、結(jié)論等);4、參考文獻(xiàn)(或資料)河南大學(xué)本科生畢業(yè)論文(設(shè)計(jì)、創(chuàng)作)承諾書論文題目linux平臺(tái)下的mix匯編器的設(shè)計(jì)與實(shí)現(xiàn)姓 名朱選偉所學(xué)專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué) 號(hào)02023191完成時(shí)間2007年5

12、月20日指導(dǎo)教師姓名職稱陳志國(guó)(教授)、杜瑩(助教)承諾內(nèi)容:1、本畢業(yè)論文(設(shè)計(jì)、創(chuàng)作)是學(xué)生 朱選偉 在導(dǎo)師 陳志國(guó)、杜瑩 的指導(dǎo)下獨(dú)立完成的,沒(méi)有抄襲、剽竊他人成果,沒(méi)有請(qǐng)人代做,若在畢業(yè)論文(設(shè)計(jì)、創(chuàng)作)的各種檢查、評(píng)比中被發(fā)現(xiàn)有以上行為,愿按學(xué)校有關(guān)規(guī)定接受處理,并承擔(dān)相應(yīng)的法律責(zé)任。2、學(xué)校有權(quán)保留并向上級(jí)有關(guān)部門送交本畢業(yè)論文(設(shè)計(jì)、創(chuàng)作)的復(fù)印件和磁盤。備注:學(xué)生簽名: 指導(dǎo)教師簽名: 2007 年 5 月 20 日 2007 年 5 月 20 日說(shuō)明:學(xué)生畢業(yè)論文(設(shè)計(jì)、創(chuàng)作)如有保密等要求,請(qǐng)?jiān)趥渥⒅忻鞔_,承諾內(nèi)容第2條即以備注為準(zhǔn)。目 錄第1章 緒論11.1 linux下

13、編譯的一般過(guò)程11.2 makefile文件簡(jiǎn)介21.3 c+編程語(yǔ)言31.4 gcc編譯器簡(jiǎn)介3第2章 系統(tǒng)開發(fā)基礎(chǔ)知識(shí)簡(jiǎn)介42.1 mix系統(tǒng)及匯編語(yǔ)言簡(jiǎn)介42.1.1 mix系統(tǒng)簡(jiǎn)介42.1.2 mix指令集62.1.3 mixal匯編語(yǔ)言72.2 虛擬機(jī)技術(shù)簡(jiǎn)介8第3章 系統(tǒng)總體規(guī)劃及設(shè)計(jì)93.1 概要介紹93.1.1 mix匯編語(yǔ)言的匯編93.1.2 mix機(jī)器指令的載入93.1.3 mix機(jī)器指令的運(yùn)行93.2 匯編器概要設(shè)計(jì)103.2.1 詞法分析器103.2.2 語(yǔ)法分析器103.2.3 代碼生成器113.2.4 符號(hào)表113.2.5 錯(cuò)誤處理模塊113.3 匯編器主要數(shù)據(jù)結(jié)構(gòu)

14、及算法113.3.1 地址計(jì)數(shù)器lc113.3.2 符號(hào)表113.3.3 未知標(biāo)號(hào)表12第4章 系統(tǒng)具體設(shè)計(jì)與實(shí)現(xiàn)134.1 mix系統(tǒng)基本結(jié)構(gòu)模塊概述134.2 mix虛擬機(jī)系統(tǒng)的具體實(shí)現(xiàn)134.2.1 makefile文件154.2.2 mix虛擬機(jī)主程序174.2.3 mixal匯編調(diào)試器主程序184.2.4 assemble匯編程序18結(jié) 論22參考文獻(xiàn)23摘 要mix計(jì)算機(jī)是一個(gè)假想的計(jì)算機(jī),它來(lái)源于著名的計(jì)算機(jī)編程藝術(shù)(the art of computer programing)。現(xiàn)實(shí)中并沒(méi)有真正的實(shí)體機(jī)器,為了學(xué)習(xí)這本書,作者就在自己的pc上實(shí)現(xiàn)該計(jì)算機(jī)的虛擬機(jī)以使書上的代碼可

15、以順利運(yùn)行。c/c+是linux操作系統(tǒng)平臺(tái)下的主流語(yǔ)言,相對(duì)簡(jiǎn)便好用,就選用c+作為實(shí)現(xiàn)的主要語(yǔ)言,這涉及到linux平臺(tái)下的基本的c+編譯的知識(shí)。這部分編譯知識(shí)與平常使用較多的windows平臺(tái)下的編譯知識(shí)有著顯著不同,所以會(huì)進(jìn)行較多的介紹。在一臺(tái)電腦上模擬另一種體系結(jié)構(gòu)不同的計(jì)算機(jī)涉及到了虛擬機(jī)的基本知識(shí),虛擬機(jī)技術(shù)的核心是匯編技術(shù)。本文首先簡(jiǎn)單介紹了linux下編譯的一般過(guò)程、makefile文件以及開發(fā)環(huán)境,包括mix系統(tǒng)、匯編語(yǔ)言以及虛擬機(jī)技術(shù)。然后介紹了本系統(tǒng)的總體規(guī)劃及設(shè)計(jì)。最后講述了系統(tǒng)具體設(shè)計(jì)與實(shí)現(xiàn)。關(guān)鍵詞 mix匯編器,vm技術(shù),c/c+,linuxabstractmix

16、 is a fictitious 16 bits computer created by d e.knuth in his famous bookthe art of computer programming,and all algorithms in his book are coded by mix assemble language. nowadays computers can not execute those codes, so i want to achieve the main system structure of this machine on my pc for lear

17、ning this book. there is not a such software in the linux platform, so that is a good idea to actualize it under the linux platform. c/c+ are the system languages of the linux operating system, and i choose the c+ as a main language. the c+ compiler knowledge of the linux operating system is very di

18、fferent from windows, so i shall give a particular introduction about it. the virtual machine technology is the central idea to “virtual” a machine, and of course it is the most important technology to the realization of mix computer system. the main idea of vm is involved the assemble technology.th

19、is paper firstly introduces the process of compiler under linux platform, the file of makefile and the background of the system.then explains the design of this system as a whole. finally, introduces the realize of this system.keywords mix compiler, vm technolegy, c+, linux第1章 緒論mix計(jì)算機(jī)是d.e.knuth在其名著

20、計(jì)算機(jī)編程藝術(shù)(the art of computer programming)中描述的一種計(jì)算機(jī),他書中的所有算法都由該計(jì)算機(jī)的匯編語(yǔ)言實(shí)現(xiàn)。但現(xiàn)實(shí)生活中并沒(méi)有運(yùn)行mix體系結(jié)構(gòu)的計(jì)算機(jī),所以在現(xiàn)有的計(jì)算機(jī)上并不能直接運(yùn)行書中的mix匯編代碼。唯一的辦法只有在現(xiàn)有的計(jì)算機(jī)上將mix的主要體系結(jié)構(gòu)加以模仿,使它可以運(yùn)行書中的mix匯編代碼。由于在linux平臺(tái)下并沒(méi)有相關(guān)的軟件存在,所以在linux下構(gòu)造這樣一個(gè)具有mix計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)的虛擬機(jī)具有開創(chuàng)性的意義。實(shí)現(xiàn)的mix匯編器的主要的作用是運(yùn)行mix匯編語(yǔ)言,它的主體部分是一個(gè)匯編器。虛擬機(jī)的實(shí)現(xiàn)依賴于對(duì)計(jì)算機(jī)系統(tǒng)模仿,除去平臺(tái)和語(yǔ)言的關(guān)系

21、,最主要的技術(shù)是虛擬機(jī)技術(shù),該技術(shù)通過(guò)軟件的方法使在一臺(tái)計(jì)算機(jī)上運(yùn)行另一臺(tái)體系結(jié)構(gòu)完全不同的計(jì)算機(jī)的機(jī)器指令的想法成為了可能。這其中最主要的代表便是java虛擬機(jī),它使java語(yǔ)言實(shí)現(xiàn)了“平臺(tái)無(wú)關(guān)性”。因此借鑒這個(gè)很著名的虛擬機(jī)技術(shù)來(lái)實(shí)現(xiàn)對(duì)該系統(tǒng)的模擬會(huì)有性能上的保證。下面,首先對(duì)編程的基本環(huán)境作一個(gè)簡(jiǎn)單的介紹,然后就開始介紹該虛擬機(jī)的設(shè)計(jì)與實(shí)現(xiàn)。linux平臺(tái)下的編程習(xí)慣與windows平臺(tái)下有很大的不同,它很“原始”,基本上所有的東西都要自己設(shè)置,下面假定讀者極少接觸linux,會(huì)對(duì)linux平臺(tái)下的編程技術(shù)作一個(gè)相對(duì)簡(jiǎn)要但清楚的介紹。1.1 linux下編譯的一般過(guò)程linux下沒(méi)有.n

22、et之類的集成開發(fā)環(huán)境。它基本的開發(fā)工具是vi,與windows下的記事本很相像,在它上面輸入源程序,然后用命令執(zhí)行該程序。linux支持多種語(yǔ)言,例如c語(yǔ)言、c+語(yǔ)言以及perl語(yǔ)言等。最常見和最重要的是c語(yǔ)言的編譯器gcc與c+語(yǔ)言的編譯器g+。這個(gè)執(zhí)行者有著多達(dá)一百條的編譯命令在需要時(shí)讓你輸,并且需要編程者與操作系統(tǒng)直接打交道,對(duì)于需要操作系統(tǒng)功能調(diào)用的地方,程序員必須自己設(shè)置適合的系統(tǒng)調(diào)用以及庫(kù)函數(shù)。linux下編寫程序的基本步驟是:(1)用vi或emacs寫下源代碼,保存。(2)用gcc編譯它(在命令行下輸入命令:gcc 編譯選項(xiàng) 保存名字.c)。(3)一般情況下,若編譯無(wú)錯(cuò)誤的話,

23、會(huì)生成一個(gè).out文件,鍵入如下命令運(yùn)行它:名字.out。當(dāng)然在很多情況下不能一次就正確編譯通過(guò),會(huì)有很多錯(cuò)誤需要改正和調(diào)試,這時(shí)候就可以用gcc自帶的調(diào)試工具進(jìn)行調(diào)試,直至可以運(yùn)行。以上僅是最一般的匯編過(guò)程,若是有多個(gè)源文件的大型程序,就不得不自己定義他們之間的相互依賴關(guān)系和編譯調(diào)用關(guān)系,這就涉及到了make工具和makefile文件,這可能是與windows平臺(tái)下的編程習(xí)慣最不同的一點(diǎn),所以對(duì)此作稍微詳細(xì)的介紹。1.2 makefile文件簡(jiǎn)介make工具能自動(dòng)地確定一個(gè)大程序系統(tǒng)中哪些程序文件需要被重新編譯,并發(fā)出命令對(duì)這些程序文件進(jìn)行編譯。make命令執(zhí)行時(shí),需要一個(gè)makefile文

24、件,以告訴make命令需要怎么樣去編譯和鏈接程序。makefile關(guān)系到了整個(gè)工程的編譯規(guī)則。一個(gè)工程中的源文件不計(jì)其數(shù),其按類型、功能、模塊分別放在若干個(gè)目錄中,makefile定義了一系列的規(guī)則來(lái)指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至進(jìn)行更復(fù)雜的功能操作,因?yàn)閙akefile就像一個(gè)shell腳本一樣,其中也可以執(zhí)行操作系統(tǒng)的命令。makefile規(guī)則如下:target . : prerequisites . command . . (1)target:是一個(gè)目標(biāo)文件,也可以是執(zhí)行文件,還可以是一個(gè)標(biāo)簽(label)。(2)prerequisites:就是

25、要生成target所需要的文件或是目標(biāo)。(3)command:是make需要執(zhí)行的命令(任意的shell命令)。這是一個(gè)文件的依賴關(guān)系,也就是說(shuō),target這一個(gè)或多個(gè)的目標(biāo)文件依賴于prerequisites中的文件,其生成規(guī)則定義在command中。這就是makefile的規(guī)則。1.3 c+編程語(yǔ)言由于linux操作系統(tǒng)平臺(tái)的系統(tǒng)語(yǔ)言是c語(yǔ)言,因此它對(duì)c+語(yǔ)言也有著較好的支持。linux下的c+與c用同一個(gè)編譯器gcc(g+事實(shí)上屬于gcc),這個(gè)編譯器也是與windows操作系統(tǒng)下的一般編譯器有著很大的不同,下面對(duì)這個(gè)編譯器進(jìn)行簡(jiǎn)要的介紹。1.4 gcc編譯器簡(jiǎn)介gcc(gnu com

26、piler collection)是自由軟件組織gnu開發(fā)的一款c/c+編譯器,是linux平臺(tái)下的標(biāo)準(zhǔn)c/c+編譯器,功能非常的強(qiáng)大,但使用也非常的繁瑣。由于linux操作系統(tǒng)平臺(tái)下沒(méi)有集成開發(fā)環(huán)境,因此開發(fā)者不得不自己對(duì)程序進(jìn)行編譯和調(diào)試,而這個(gè)就要用到基本的編譯選項(xiàng),這時(shí)要注意多使用man選項(xiàng)查看基本的幫助。第2章 系統(tǒng)開發(fā)基礎(chǔ)知識(shí)簡(jiǎn)介本章介紹基本的mix匯編知識(shí)和虛擬機(jī)的技術(shù)背景。首先介紹mix系統(tǒng)的結(jié)構(gòu)和匯編語(yǔ)言,在此基礎(chǔ)上簡(jiǎn)單介紹主要技術(shù)-虛擬機(jī)技術(shù)的基本原理。2.1 mix系統(tǒng)及匯編語(yǔ)言簡(jiǎn)介為了實(shí)現(xiàn)mix匯編語(yǔ)言的正常運(yùn)行,這樣就必須涉及到匯編器的實(shí)現(xiàn)和mix虛擬機(jī)的實(shí)現(xiàn),而在真

27、實(shí)的機(jī)器上匯編器和機(jī)器指令的執(zhí)行二者的聯(lián)系是相當(dāng)緊密的。作為實(shí)現(xiàn)的基礎(chǔ),在這里就將mix系統(tǒng)結(jié)構(gòu)和mix匯編語(yǔ)言放在一起介紹。2.1.1 mix系統(tǒng)簡(jiǎn)介計(jì)算機(jī)系統(tǒng)包括cpu、存儲(chǔ)器、外設(shè)、以及輸入輸出系統(tǒng),mix也不例外。圖2-1是文獻(xiàn)2書中自帶的一個(gè)圖,用來(lái)說(shuō)明mix系統(tǒng)用到的基本結(jié)構(gòu)。mix系統(tǒng)由cpu、一個(gè)具有四千個(gè)存儲(chǔ)單元的存儲(chǔ)器、外設(shè)為磁帶和磁盤的幾部分組成,下面就突出重點(diǎn)的介紹一下它的基本指令,機(jī)器指令的組成以及匯編語(yǔ)言的語(yǔ)法。1 cpu中使用的寄存器寄存器a和寄存器x是cpu中最常使用的寄存器,用作對(duì)數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算和操作,aaccumulater可以獨(dú)立使用,也可與xexten

28、sion連接使用,而就像看到的,a寄存器是基本寄存器也稱低位寄存器,而x寄存器則是高位寄存器也稱擴(kuò)展位寄存器。i是index registers,用于計(jì)數(shù)或訪問(wèn)可變的存儲(chǔ)器地址。j是jump address,用于存放與jump指令相關(guān)的地址。注意在mix系統(tǒng)中,一個(gè)計(jì)算機(jī)字是5個(gè)字節(jié),一個(gè)字節(jié)含6位,這與目前的計(jì)算機(jī)系統(tǒng)是不同的。i寄存器的內(nèi)容假想為+/-000mn處理。j寄存器的內(nèi)容假想為+mn000處理。即j寄存器不能有負(fù)值存在。圖2-1 mix計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)2 匯編指令結(jié)構(gòu)與相應(yīng)的機(jī)器指令翻譯基本結(jié)構(gòu)為: c m ,i(f)上面這個(gè)式子是指令的表達(dá)形式。其中,c代表command的,m代

29、表memory,i代表index,f代表field。當(dāng)i=0時(shí),可寫為c m(f),下面是具體的機(jī)器碼存放規(guī)則以及相應(yīng)的解釋。一條指令是以一個(gè)符號(hào)位加上一個(gè)計(jì)算機(jī)字存放的:+/- i f c 。其中各域的作用說(shuō)明如下:(1)+/-:代表一個(gè)符號(hào)位。(2) :占兩個(gè)字節(jié),即c m ,i(f) 中的m,就是內(nèi)存單元的編號(hào)(即地址),一個(gè)內(nèi)存單元就是一個(gè)計(jì)算機(jī)字的大小,即word=ra。(3) i :占一個(gè)字節(jié),表示第幾個(gè)變址寄存器。(4)f:占一個(gè)字節(jié),f=8l+r,cm,i(f)通常寫成cm,i(l:r),表示該指令操作是相對(duì)于某內(nèi)存單元的第l字節(jié)至第r字節(jié)表示的內(nèi)容來(lái)做的。當(dāng)f為(0:5)時(shí),

30、可寫為c m,i,此時(shí)若i=0,就寫成c m。在mix里一個(gè)計(jì)算機(jī)字是5個(gè)字節(jié),一個(gè)字節(jié)含6位。(5)c:占一個(gè)字節(jié),c以不同的值存在代表不同的操作指令。3 mix具體匯編指令使用舉例下面舉例說(shuō)明指令的表達(dá)形式。以下的指令是lda,即把指定內(nèi)存處的指令裝入寄存器a中。假設(shè)存儲(chǔ)單元2000的內(nèi)容為:-86354指令與指令完成后寄存器a中的內(nèi)容對(duì)照如下所示:lda 2000 -86354lda 2000(1:5) +86354lda 2000(3:5) +00354lda 2000(0:3) -00863lda 2000(4:4) +00005lda 2000(0:0) -00000lda 200

31、0(1:1) +000082.1.2 mix指令集具體指令見圖2-2。mix指令系統(tǒng)由基本的裝入、存儲(chǔ)、跳轉(zhuǎn)、運(yùn)算以及比較等種類的操作組成。具體的使用可參見上節(jié)的“mix具體指令說(shuō)明”,下面仍以lda 2000為例。大致的情況是,如果指令中沒(méi)有逗號(hào),即沒(méi)有i寄存器的加入,那么指令背后的數(shù)字即表示直接的內(nèi)存地址。若是有i寄存器,則該地址必須與i寄存器中的地址進(jìn)行運(yùn)算之后方可作為指令運(yùn)行時(shí)使用的內(nèi)存地址。由于mix匯編語(yǔ)言中沒(méi)有像現(xiàn)在一般的匯編語(yǔ)言的可直接分別訪問(wèn)字、字節(jié)、雙字的指令訪問(wèn)模式,它是通過(guò)后面的括號(hào)中的內(nèi)容表示操作的是該地址所表示的內(nèi)存字的哪幾個(gè)字節(jié),比如(1:5)就表示載入的是從第一

32、字節(jié)到第五字節(jié)的內(nèi)容,進(jìn)而達(dá)到訪問(wèn)字節(jié)的目的。圖2-2 mix系統(tǒng)匯編指令集2.1.3 mixal匯編語(yǔ)言在總結(jié)了mix指令集后,看看mixal匯編語(yǔ)言的定義。用mixal寫的程序結(jié)構(gòu)如下:程序一行一行來(lái)讀,但整體結(jié)構(gòu)上看開頭的符號(hào)只是一些自定義的記號(hào),或者是代表某個(gè)數(shù)值,或者代表所在行指令在內(nèi)存中的單元地址。它后面的符號(hào)一般是一個(gè)mixal匯編指令或mix指令集中的某個(gè)指令。然后才是表達(dá)式,其含義和寫法都和第二列的指令是相關(guān)聯(lián)的,是操作數(shù)和操作指令的關(guān)系。以*開頭的語(yǔ)句,以及第四列都是注釋。2.2 虛擬機(jī)技術(shù)簡(jiǎn)介java虛擬機(jī)是現(xiàn)在最著名的虛擬機(jī),所以主要借鑒了java虛擬機(jī)的原理,在它的基

33、礎(chǔ)上簡(jiǎn)化而得mix系統(tǒng)的實(shí)現(xiàn)。java虛擬機(jī)由五個(gè)部分組成:一組指令集、一組寄存器、一個(gè)棧、一個(gè)無(wú)用單元收集堆(garbage-collected-heap)以及一個(gè)方法區(qū)域。這五部分是虛擬機(jī)的邏輯成份,不依賴任何實(shí)現(xiàn)技術(shù)或組織方式,但它們的功能必須在真實(shí)機(jī)器上以某種方式實(shí)現(xiàn)。也就是說(shuō),為了實(shí)現(xiàn)所要的機(jī)器的性能,必須自己構(gòu)造一個(gè)不依賴硬件的、邏輯實(shí)現(xiàn)的中間層結(jié)構(gòu),自己完成指令的裝入而不是由機(jī)器硬件來(lái)完成。第3章 系統(tǒng)總體規(guī)劃及設(shè)計(jì)本章主要介紹系統(tǒng)的相關(guān)具體規(guī)劃?;镜墓δ軇澐质鞘紫葘?duì)mix匯編語(yǔ)言進(jìn)行匯編解釋,然后將解釋得到的機(jī)器指令從“內(nèi)存”載入到“寄存器”中,最后運(yùn)行機(jī)器指令。整個(gè)虛擬機(jī)在

34、結(jié)構(gòu)上采用一種自頂向下的方式將各功能模塊分類并且定義各自的接口,保證沒(méi)有結(jié)構(gòu)上的過(guò)多藕和,使各模塊相互獨(dú)立。3.1 概要介紹該部分介紹了各個(gè)功能模塊所要完成的基本工作,以及相關(guān)的基本構(gòu)造。具體介紹了各部分實(shí)現(xiàn)時(shí)要完成的主要工作和面臨的主要問(wèn)題。3.1.1 mix匯編語(yǔ)言的匯編匯編是將mix匯編語(yǔ)言轉(zhuǎn)換為相應(yīng)的mix機(jī)器指令并將其放入相應(yīng)的內(nèi)存中供下一步使用。由于mix系統(tǒng)的機(jī)器指令和匯編語(yǔ)言之間有非常明確的對(duì)應(yīng)關(guān)系,因此只需按照mix匯編語(yǔ)言的基本語(yǔ)法,一步步匯編即可。這個(gè)過(guò)程中最主要的工作涉及到一個(gè)機(jī)器指令與匯編指令的對(duì)照表,匯編的主體工作便是利用這個(gè)表,用c+語(yǔ)言描述它們的對(duì)應(yīng)關(guān)系,說(shuō)明幾

35、個(gè)域應(yīng)該怎么填。3.1.2 mix機(jī)器指令的載入載入的工作主要是先將編譯得到的機(jī)器指令送給“cpu”,并提供程序地址供運(yùn)行時(shí)用。3.1.3 mix機(jī)器指令的運(yùn)行作用是根據(jù)lc載入相應(yīng)的機(jī)器指令,執(zhí)行并重新設(shè)置lc指向下一條要執(zhí)行的指令。下面重點(diǎn)介紹匯編部分,因?yàn)檫@是整個(gè)虛擬機(jī)實(shí)現(xiàn)的基礎(chǔ),事實(shí)上也是集中體現(xiàn)了整個(gè)結(jié)構(gòu)的特點(diǎn)。3.2 匯編器概要設(shè)計(jì)根據(jù)alfred.v.aho所描述的編譯器模塊結(jié)構(gòu),可以將mix匯編器設(shè)計(jì)為的幾個(gè)功能模塊:詞法分析器、語(yǔ)法分析器、代碼生成器、符號(hào)表和錯(cuò)誤處理模塊。各個(gè)功能模塊之間的相互關(guān)系如圖3-1所示。對(duì)于本部分的實(shí)現(xiàn)借鑒了c+程序設(shè)計(jì)語(yǔ)言中的一個(gè)桌面計(jì)算器的設(shè)計(jì)

36、理念。圖3-1 mix匯編器結(jié)構(gòu)3.2.1 詞法分析器詞法分析器將mix源程序解釋成一個(gè)個(gè)獨(dú)立的記號(hào),然后將記號(hào)的類型以及記號(hào)所對(duì)應(yīng)的值返回給語(yǔ)法分析器。3.2.2 語(yǔ)法分析器語(yǔ)法分析器依據(jù)mix語(yǔ)言的相關(guān)規(guī)則,對(duì)由詞法分析器返回的記號(hào)序列進(jìn)行分析。在語(yǔ)法分析的過(guò)程中,一般會(huì)生成相應(yīng)的符號(hào)表,同時(shí)調(diào)用代碼生成器生成目標(biāo)代碼。如果在語(yǔ)法分析過(guò)程中遇到任何錯(cuò)誤語(yǔ)句,則調(diào)用錯(cuò)誤處理模塊。語(yǔ)法分析的主要實(shí)現(xiàn)思想是采用自頂向下遞歸下降的實(shí)現(xiàn)。雖然在一般情況下不鼓勵(lì)采用遞歸的方式去構(gòu)造語(yǔ)法分析部分,但由于mix匯編語(yǔ)言相對(duì)簡(jiǎn)單,且c+函數(shù)調(diào)用的代價(jià)相對(duì)較低,而遞歸實(shí)現(xiàn)相對(duì)結(jié)構(gòu)清晰,容易實(shí)現(xiàn),所以在這里采用

37、了遞歸的方式。3.2.3 代碼生成器代碼生成器負(fù)責(zé)生成每個(gè)機(jī)器指令的存儲(chǔ)工作。當(dāng)mix源程序太長(zhǎng)或者指令參數(shù)使用錯(cuò)誤時(shí),代碼生成器提示錯(cuò)誤信息。3.2.4 符號(hào)表符號(hào)表是一個(gè)輔助功能模塊,主要用于處理標(biāo)號(hào)信息。該模塊提供必要的符號(hào)操作,像定義符號(hào)、查詢符號(hào)等。3.2.5 錯(cuò)誤處理模塊錯(cuò)誤處理模塊輸出相關(guān)的錯(cuò)誤信息和發(fā)生錯(cuò)誤的位置,然后退出程序。錯(cuò)誤處理模塊不會(huì)分析產(chǎn)生錯(cuò)誤原因,也不會(huì)修復(fù)任何錯(cuò)誤。3.3 匯編器主要數(shù)據(jù)結(jié)構(gòu)及算法傳統(tǒng)的匯編器采用兩次匯編來(lái)處理標(biāo)號(hào)向前引用問(wèn)題。在第一遍掃描先確定所有的標(biāo)號(hào)的地址,并保存在符號(hào)表中。第二遍掃描依據(jù)第一遍掃描所生成的符號(hào)表來(lái)匯編每一條匯編語(yǔ)句。本系統(tǒng)

38、也采用了這種方法,因?yàn)樗募夹g(shù)很成熟,但是由于mix匯編語(yǔ)言的簡(jiǎn)易性,所以就采用了變異的一遍掃描的方法,具體的做法是將第一遍掃描的結(jié)果和匯編過(guò)程結(jié)合在一起,實(shí)際上也屬于二遍掃描。mix匯編器主要的數(shù)據(jù)結(jié)構(gòu)包括:地址計(jì)數(shù)器lc、符號(hào)表和未知標(biāo)號(hào)表。3.3.1 地址計(jì)數(shù)器lc地址計(jì)數(shù)器lc用于計(jì)算每個(gè)標(biāo)號(hào)對(duì)應(yīng)的地址和生成目標(biāo)代碼的存儲(chǔ)位置。3.3.2 符號(hào)表mix匯編器采用散列表來(lái)組織符號(hào)信息,同時(shí)使用鏈表來(lái)處理散列沖突的情況。3.3.3 未知標(biāo)號(hào)表未知標(biāo)號(hào)表記錄在第一次掃描中遇到的向前引用標(biāo)號(hào)的信息,然后在第二次掃描中用于修正目標(biāo)代碼。第4章 系統(tǒng)具體設(shè)計(jì)與實(shí)現(xiàn)有了前面的基礎(chǔ),本章將給出基本的模

39、塊以及與之相關(guān)的基本原理和它們之間的聯(lián)系與實(shí)現(xiàn)。這里涉及少量的代碼,需要用到的c+語(yǔ)言的知識(shí)。4.1 mix系統(tǒng)基本結(jié)構(gòu)模塊概述mix系統(tǒng)的基本結(jié)構(gòu)在第2章已詳細(xì)的介紹過(guò),本章的主要任務(wù)是在此基礎(chǔ)上首先合理地描述該系統(tǒng)的硬件結(jié)構(gòu),適當(dāng)?shù)囟x它的硬件行為,然后再描述機(jī)器指令的實(shí)現(xiàn)過(guò)程。具體的實(shí)現(xiàn)參照了java虛擬機(jī)的原理和最新的關(guān)于mixal虛擬機(jī)的實(shí)現(xiàn)(是knuth先生關(guān)于mix系統(tǒng)的一個(gè)擴(kuò)展)。而后是匯編程序的實(shí)現(xiàn),需要在前一章所述的基礎(chǔ)上描述其匯編解釋過(guò)程并得到相關(guān)的機(jī)器指令。4.2 mix虛擬機(jī)系統(tǒng)的具體實(shí)現(xiàn)經(jīng)過(guò)以上分析,基本的實(shí)現(xiàn)就待編碼了。但是,在編碼中首先遇到的是調(diào)試問(wèn)題。于是就在

40、原來(lái)結(jié)構(gòu)的基礎(chǔ)上換一個(gè)輸出,形成一個(gè)匯編語(yǔ)言和機(jī)器碼的對(duì)照跟蹤,從而具有一個(gè)簡(jiǎn)單的調(diào)試功能。由此整個(gè)程序的實(shí)現(xiàn)分成了兩個(gè)基本的功能塊:匯編器部分和機(jī)器部分,匯編器部分用于輸出對(duì)照機(jī)器碼用于調(diào)試,而機(jī)器部分就是運(yùn)行得到結(jié)果。它們的基本結(jié)構(gòu)是一樣的,不同的僅僅是在輸出上,一個(gè)用于得到結(jié)果,一個(gè)得到對(duì)應(yīng)機(jī)器指令,下面就先給出基本的結(jié)構(gòu)塊,然后再就具體的不同介紹二者的實(shí)現(xiàn)。根據(jù)前面的介紹,就將與機(jī)器緊密相關(guān)的幾個(gè)部分分塊,放在幾個(gè)不同的源文件中,這樣既容易修改實(shí)現(xiàn)起來(lái)也顯得結(jié)構(gòu)清晰,封裝容易。以下是對(duì)這幾個(gè)部分的介紹:mix機(jī)器的模擬相關(guān)(mix-machine.cpp):具體與機(jī)器碼的編譯、運(yùn)行、連

41、接相關(guān),是本程序?qū)崿F(xiàn)的一個(gè)主要部分,定義了機(jī)器相關(guān)類。mix模擬器(mix-sim.cpp):mix虛擬機(jī)的模擬程序。這是一個(gè)主程序,是mix匯編指令的實(shí)現(xiàn)部分。mix的匯編(mix-assemble.cpp):實(shí)現(xiàn)了mix匯編語(yǔ)言的語(yǔ)法分析和二進(jìn)制代碼生成的工作對(duì)mix程序進(jìn)行解釋執(zhí)行。它是本次設(shè)計(jì)的另一個(gè)重點(diǎn),包含用于將mixal匯編語(yǔ)言解釋為mix機(jī)器碼的類。mix匯編器(mixal.cpp):可以輸出包含mix匯編語(yǔ)言對(duì)應(yīng)機(jī)器碼的列表文件。i/o控制(mix-io.cpp):外設(shè)部分的設(shè)置。雖然沒(méi)有實(shí)現(xiàn)磁帶機(jī)等外設(shè),但是定義了基本的i/o,這里的數(shù)據(jù)使用自定義的字符數(shù)據(jù)類型。出錯(cuò)處理(

42、mix-error.cpp):對(duì)所有錯(cuò)誤進(jìn)行處理。這里沒(méi)有句柄之類的處理函數(shù),僅有一句出錯(cuò)提示。對(duì)底層設(shè)施的模擬(mix-arith):mix匯編和模擬的底層設(shè)施,定義了基本的數(shù)據(jù)類型,cpu類型、內(nèi)存、匯編格式等。雜類(misc.h):一些不好劃分的類都放到了這里。包含了一些對(duì)字符和操作數(shù)的定義,是一些能用到的字符。其中,除了mixal.cpp,mix-sim.cpp兩個(gè)主程序之外,每個(gè)源程序文件都有一個(gè)同名的.h頭文件,定義了一些關(guān)系較為密切的數(shù)據(jù)和宏,而misc僅有一個(gè).h頭文件。圖4-1展示了mix系統(tǒng)基本的系統(tǒng)結(jié)構(gòu)。下面一節(jié)列出mix系統(tǒng)設(shè)計(jì)的各個(gè)功能具體代碼實(shí)現(xiàn)。源代碼目錄下的文件

43、可分為四類:makefile文件、cpp源程序、*.h頭文件以及一個(gè)用mix匯編語(yǔ)言寫的源程序文件。程序主體可分為兩部分mix計(jì)算機(jī)環(huán)境模擬部分和mix匯編器部分,主體分別屬于是mix.cpp和mixal.cpp文件。mix程序先經(jīng)匯編程序編譯后在所謂的“機(jī)器”上運(yùn)行。這兩個(gè)部分事實(shí)上并沒(méi)有實(shí)質(zhì)聯(lián)系,mix部分是實(shí)際的程序執(zhí)行顯示結(jié)果部分,而mixal則是顯示相應(yīng)的機(jī)器指令主要供調(diào)試用。他們的主體結(jié)構(gòu)類似,只是在輸入和結(jié)果上有一些不同。調(diào)用的主體函數(shù)也基本相同。下面先由makefile文件入手將總體結(jié)構(gòu)闡述一下再深入理解具體組成。圖4-1 mix系統(tǒng)基本組成圖4.2.1 makefile文件m

44、akefile文件聯(lián)系著所有的文件,描述了所有源文件之間的關(guān)系。下面是該文件的代碼(#后為注釋):makefile:all: mix mixal #all表示創(chuàng)建makefile所知的最頂層目標(biāo),這里是mix mixal.phony: clean #清除執(zhí)行文件和所有的中間目標(biāo)文件clean:-rm *.omix: mix-sim.o mix-machine.o mix-assemble.o mix-arith.o mix-error.o mix-io.o g+ -o2 -o mix mix-sim.o mix-machine.o mix-assemble.o mix-arith.o mix-

45、error.o mix-io.o #運(yùn)用g+將以上名稱中含有mix的.o(object)目標(biāo)文件組裝成mixmixal: mixal.o mix-assemble.o mix-arith.o mix-error.o g+ -o2 -o mixal mixal.o mix-assemble.o mix-arith.o mix-error.o#同上,用g+將mixal.o mix-assemble.o mix-arith.o mix-error.o組裝成可執(zhí)行文件文件mixalmix-assemble.o: mix-assemble.cpp mix-assemble.h mix-arith.h m

46、ix-error.h misc.hg+ -o2 -c mix-assemble.cpp #將mix-assemble.cpp編譯為.o目標(biāo)文件。其他文件為用到的包含文件,此處的mix-sim.o: mix-sim.cpp mix-assemble.h mix-machine.h mix-arith.h mix-error.h misc.hg+ -o2 -c mix-sim.cpp #將mix-sim.cpp 編譯為.o目標(biāo)文件mix-machine.o: mix-machine.cpp mix-machine.h mix-arith.h mix-error.h misc.hg+ -o2 -c

47、mix-machine.cpp #編譯mix-machine.cppmix-arith.o: mix-arith.cpp mix-arith.h mix-error.h misc.hg+ -o2 -c mix-arith.cpp #編譯mix-arith.cppmix-error.o: mix-error.cpp mix-error.hg+ -o2 -c mix-error.cpp #編譯mix-error.cppmix-io.o: mix-io.cpp mix-io.h misc.hg+ -o2 -c mix-io.cpp 編譯mix-io.cpp整個(gè)程序執(zhí)行的過(guò)程是:(1)在源代碼目錄ma

48、ke all。(2)primes.mix是用mix匯編語(yǔ)言寫的計(jì)算前500個(gè)素?cái)?shù)的程序。命令行下輸入./mix primes.mix即可看到結(jié)果(需調(diào)試時(shí)輸入/mixal primes.mix)。以下是基本函數(shù)及相關(guān)的重要數(shù)據(jù)類型。表4-1 主要函數(shù)名稱函數(shù)詞法分析器get-token()語(yǔ)法分析,中間代碼生成assemble(filename)載入load(programname)執(zhí)行指令execute-instruction()運(yùn)行mix.run()mix虛擬機(jī)mix-sim()匯編器mixal()打開mix源代碼文件src_file.open(filename)出錯(cuò)處理mixerror(

49、) 表4-2是主要的數(shù)據(jù)結(jié)構(gòu)定義。表4-2 基本數(shù)據(jù)結(jié)構(gòu)名稱含義sym_node鏈表結(jié)構(gòu),大多數(shù)的地址域采取此結(jié)構(gòu)op_spec操作碼的結(jié)構(gòu)trie_node三叉搜索樹,符號(hào)表的基本結(jié)構(gòu)op_init_table初始時(shí)的符號(hào)表 enum opcode對(duì)操作數(shù)代碼的定義,詳見前面的內(nèi)容mixword字節(jié)定義,基本的數(shù)據(jù)類型mixprogrammix匯編程序類型mixcpucpu類mixmemerycell內(nèi)存類mixmachine機(jī)器類,所要實(shí)現(xiàn)的虛擬機(jī)的類mixdevicei/o設(shè)備的定義4.2.2 mix虛擬機(jī)主程序這個(gè)模塊的基本作用是模擬mix計(jì)算機(jī)系統(tǒng),也就是匯編執(zhí)行mix機(jī)器指令。主體

50、的程序是mix-sim.cpp,主要作用是顯示必要信息并執(zhí)行相應(yīng)命令打開匯編并執(zhí)行mix機(jī)器指令,作用類似于linux下的shell命令行解釋程序。主體結(jié)構(gòu)如下:(1)prog_name = argv0;if( argc = 1 ) usage(1);elsefor( int ix = 1; ix argc; +ix )/這部分是讀入在界面下的命令,并執(zhí)行。省略了具體執(zhí)行代碼,可參見源程序內(nèi)的mix-sim.cpp文件。這里有幾個(gè)選項(xiàng),用于顯示幫助,版本等信息。(2) src_file.open( src_filename, std:ios_base:in); /打開文件if( !src_fi

51、le )cerr cannot open source file src_filename endl;return -1;clock_t tbegin, tend;trymixprogram &prog = assemble( src_file );/編譯文件tbegin = clock();mix.load(prog); /載入if( !interacting ) /沒(méi)有互動(dòng)就執(zhí)行mix.run();else /否則按命令行事while(1) /這部分顯示執(zhí)行情況。需要編譯互動(dòng)選項(xiàng)時(shí)用。其/余部分仍參見mix-sim.cpp源文件。4.2.3 mixal匯編調(diào)試器主程序 mixal實(shí)現(xiàn)與mi

52、x的實(shí)現(xiàn)大同小異,步驟基本一樣。作用是輸出包含mix匯編語(yǔ)言對(duì)應(yīng)機(jī)器指令的列表文件供調(diào)試使用。只看最后的輸出實(shí)現(xiàn)。最后介紹主要的匯編部分的結(jié)構(gòu)與實(shí)現(xiàn)。4.2.4 assemble匯編程序匯編部分核心是語(yǔ)法分析器。它采用了一種遞歸下降的語(yǔ)法分析方式。對(duì)于語(yǔ)法中每個(gè)產(chǎn)生式對(duì)應(yīng)著一個(gè)處理函數(shù),還需要調(diào)用其他的函數(shù)。終結(jié)符由詞法分析程序get_token()識(shí)別,而非終結(jié)符由語(yǔ)法分析函數(shù)expr()和prim()識(shí)別。一旦一個(gè)表達(dá)式的兩個(gè)運(yùn)算對(duì)象都已經(jīng)知道了,就立即對(duì)這個(gè)表達(dá)式進(jìn)行求值。分析器利用函數(shù)get_token()取得輸入,最后一次調(diào)用get_token()得到的值可以在全局變量curr_tok中找到,curr_tok的類型是枚舉t

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論