日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

一份關(guān)于兩個(gè)匯編語(yǔ)言級(jí)別模擬CPU的虛擬機(jī)的分析文檔

1)虛擬機(jī)是什么?

"虛擬機(jī)"的概念其實(shí)很廣,最常見(jiàn)的有以下兩種虛擬機(jī),第一種是模擬"裸機(jī)"運(yùn)行的虛擬機(jī),這樣的虛擬機(jī)有VMWAREVirturePC,Bochs等,另一種是模擬操作系統(tǒng)運(yùn)行情況的虛擬機(jī),這樣的虛擬機(jī)有Wine,JVM(java虛擬機(jī)) 。其實(shí),虛擬機(jī)就是一個(gè)中間層,可以理解為是兩種環(huán)境的橋梁,如果把虛擬機(jī)的概念抽象一點(diǎn)描述,可以認(rèn)為虛擬機(jī)是在某一個(gè)環(huán)境上模擬另一種環(huán)境運(yùn)行情況的軟件,這樣的環(huán)境可以是不同的cpu,不同的os....等等 。

這里選擇的是兩個(gè)非常簡(jiǎn)單的虛擬機(jī),一個(gè)是<<編譯原理與實(shí)踐>>一書中自帶的TM虛擬機(jī),另一個(gè)是<<程序員>>雜志2003年第六期里的一篇文章<<一個(gè)小型虛擬機(jī)的實(shí)現(xiàn)>>中實(shí)現(xiàn)的虛擬機(jī),兩者都有一個(gè)共同點(diǎn),就是兩者都是在匯編語(yǔ)言級(jí)別虛擬cpu運(yùn)行情況的虛擬機(jī),正因?yàn)檫@兩個(gè)虛擬機(jī)的如此定位,所以在實(shí)現(xiàn)或者閱讀這兩個(gè)虛擬機(jī)的時(shí)候,你不得不從cpu的角度去思考問(wèn)題,你必須對(duì)cpu的運(yùn)行情況有了解,反過(guò)來(lái)說(shuō),閱讀這兩個(gè)虛擬機(jī)的源碼也可以加深對(duì)cpu工作原理以及匯編語(yǔ)言的理解 。這兩個(gè)虛擬機(jī)的源碼都可以在網(wǎng)上找到,前者在http://www.mathcs.sjsu.edu/faculty/louden/cmptext/,而后者可以在CSDN的網(wǎng)站上查找2003年第六期的源碼 。值得一提的是,CS:APP(<<深入理解計(jì)算機(jī)系統(tǒng)>>)一書中也有一章專門講述CPU的運(yùn)行原理,而且作者也自己實(shí)現(xiàn)了一個(gè)CPU,而且還是流水線型,所以這個(gè)虛擬機(jī)功能更酷也更加強(qiáng)大,因?yàn)樽髡咦约憾x了一種硬件語(yǔ)言來(lái)描述cpu,最后還有在這種cpu支持的匯編指令,在有Tcl/Tk的環(huán)境下還帶有圖形界面,非常直觀,可以在http://csapp.cs.cmu.edu/public/students.html里的Chapter 4:Processor Architecture中找到源代碼 。

2)設(shè)計(jì)一個(gè)匯編語(yǔ)言級(jí)別的虛擬機(jī)的要求

學(xué)習(xí)過(guò)計(jì)算機(jī)原理的人都知道,一個(gè)cpu至少需要有以下幾個(gè)部件:a)內(nèi)存,裝載所要執(zhí)行的指令之用;b)寄存器;3)指令集,沒(méi)有指令集執(zhí)行指令就無(wú)從談起 。前兩者非常簡(jiǎn)單,無(wú)非就是在內(nèi)存中分配一個(gè)空間來(lái)模擬就可以了,而后者這里要專門說(shuō)明一下 。我們知道任何高級(jí)語(yǔ)言,經(jīng)過(guò)這個(gè)高級(jí)語(yǔ)言的編譯器編譯之后都是翻譯成匯編語(yǔ)言的,然后由匯編器匯編成二進(jìn)制文件最后再進(jìn)行庫(kù)的鏈接等等才形成了可執(zhí)行文件,而可執(zhí)行文件最終也是二進(jìn)制格式的,在執(zhí)行可執(zhí)行文件的時(shí)候由加載器加載到內(nèi)存中去,那么這里就有一個(gè)問(wèn)題了:cpu是如何識(shí)別已經(jīng)加載到內(nèi)存中二進(jìn)制文件并且正確執(zhí)行的?這需要下面的一個(gè)概念:OpCode 。

OpCode是什么?簡(jiǎn)而言之,OpCode就是與匯編指令相對(duì)應(yīng)的二進(jìn)制格式的代碼,OpCode的英文名是OperationCode(中文可以翻譯成"操作碼"),每一個(gè)匯編指令都有一個(gè)相對(duì)應(yīng)的OpCode格式,反之不然,不過(guò)這個(gè)問(wèn)題這里不再深究,只需要知道匯編器把匯編指令翻譯成相應(yīng)的由opcode組成的二進(jìn)制文件,這樣在可執(zhí)行文件加載到內(nèi)存的時(shí)候,cpu就可以根據(jù)在可執(zhí)行文件中的opcode來(lái)執(zhí)行程序了 。理論上來(lái)說(shuō),不同廠家的cpu所支持的opcode是不的,那么這里就有一個(gè)問(wèn)題了,比如說(shuō)在Intel機(jī)子上編譯成功的可執(zhí)行文件到了AMD的機(jī)子上如何正確執(zhí)行呢?如果沒(méi)有猜錯(cuò)的是,每個(gè)cpu在實(shí)現(xiàn)的時(shí)候需要在cpu的上層加一個(gè)翻譯指令的東東....具體的我不清楚,只是猜測(cè)而已,也許不對(duì) 。扯了這么多,回到這里要實(shí)現(xiàn)的cpu上,因?yàn)橹皇呛?jiǎn)易的cpu,所以opcode上也盡量的精簡(jiǎn),在這兩個(gè)虛擬機(jī)的實(shí)現(xiàn)中,都是采用了匯編指令和opcode一一對(duì)應(yīng)的關(guān)系進(jìn)行實(shí)現(xiàn)(記住我前面說(shuō)過(guò)匯編指令和opcode在真正的cpu中并不是一一對(duì)應(yīng)的?。@樣簡(jiǎn)化了cpu的實(shí)現(xiàn) 。關(guān)于opcode,網(wǎng)上有一份不錯(cuò)的教程

推薦閱讀