簡化的8088CPU邏輯功能的仿真實現(xiàn)畢業(yè)設(shè)計論文_第1頁
簡化的8088CPU邏輯功能的仿真實現(xiàn)畢業(yè)設(shè)計論文_第2頁
簡化的8088CPU邏輯功能的仿真實現(xiàn)畢業(yè)設(shè)計論文_第3頁
簡化的8088CPU邏輯功能的仿真實現(xiàn)畢業(yè)設(shè)計論文_第4頁
簡化的8088CPU邏輯功能的仿真實現(xiàn)畢業(yè)設(shè)計論文_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、畢業(yè)設(shè)計(論文)簡化的8088cpu邏輯功能的仿真實現(xiàn)論文作者姓名:申請學(xué)位專業(yè):申請學(xué)位類別:指導(dǎo)教師姓名(職稱):論文提交日期: 簡化的8088cpu邏輯功能的仿真實現(xiàn)摘 要 “虛擬實驗平臺”主要采用以“軟”代“硬”和“虛”、“實”結(jié)合的設(shè)計思路,強調(diào)實用性,以最大限度地仿真真實的實驗環(huán)境。主要實現(xiàn)了“專用實驗臺”的虛擬化,將它“搬”到了“微機”的顯示器上,而原有在微機上的實驗操作環(huán)境和方法仍然保持不變。系統(tǒng)還提供必要的測試儀器和工具(如示波器等),以便在實驗調(diào)試時能夠?qū)\行結(jié)果進行監(jiān)視或測量,如輸出電平或波形,這種虛擬的測試儀器和工具也在界面和操作方面做到了盡可能的逼真。本文介紹了該虛擬

2、試驗平臺的整體功能特點,主要介紹了8088cpu的結(jié)構(gòu),工作方式,以及如何用vc實現(xiàn)這些具體功能的編程方法。并加入了一些程序片段,對完成工作中遇到的困難也做了些總結(jié)。關(guān)鍵詞:仿真試驗平臺;8088cpu;vc;封裝;寄存器;移植 implementation of simplified model 8088 cpus logic functionabstract"virtual platform" principal use "soft" to instead of "hard" and "superficial"

3、, "real" combination of design ideas, emphasize practicality, to maximize the simulation of the real environment. major implementation of the "exclusive experimental station," the virtual, it will be "moved" to the "pc" display, the original pc in the lab envi

4、ronment and methods remain unchanged. the system also provides the necessary test equipment and tools (such as oscilloscopes, etc.) experimental testing in order to be able to run when the results of surveillance or measurements, such as the output level or waveform, this virtual testing equipment a

5、nd tools also interface and the operation done in a realistic as possible. this paper introduces the virtual test platform overall features, mainly on the structure of the 8088 cpu, work methods, and how to use vc these specific functional programming method. and the inclusion of some procedures foo

6、tage completed work on the difficulties encountered also made some conclusion.key words: virtual experement platform;8088cpu8; vc; encapsulation;register;port目錄論文總頁數(shù):581頁1 概述11.1課題背景及意義11.2項目介紹11.2.1虛擬化技術(shù)簡介11.2.2 cpu虛擬化技術(shù)簡介21.3項目要求22 vc+6.0的編程22.1 mfc編程22.2 dll相關(guān)知識23 8088cpu介紹33.1. 概述33.2 8088cpu引線及

7、其功能33.3 8088cpu的內(nèi)部結(jié)構(gòu)43.4 時序53.5 簡化的8088cpu模型概述53.6移植bochs仿真實現(xiàn)8088cpu功能的基本思路74 bochs介紹74.1 bochs概述74.2 類 bx_cpu_c 介紹74.2.1 主要的數(shù)據(jù)成員74.2.2 主要的成員函數(shù)84.3 bx_cpu_c 類對cpu工作流程的簡易描述94.4 基本內(nèi)存系統(tǒng)114.4內(nèi)存的訪問124.5 bochs 時鐘系統(tǒng)144.6 bochs中斷系統(tǒng)155 具體移植實現(xiàn)175.1 虛擬實驗平臺統(tǒng)一的器件模型175.2 cpu類的主要功能及實現(xiàn)方法175.2.1 修改cpu loop185.2.2 修改

8、插庫18結(jié) 論18參考文獻19致 謝20聲 明21簡化的8088cpu邏輯功能的仿真實現(xiàn)1 概述1.1課題背景及意義過去當人們在開發(fā)一個項目時可能會遇到以下問題(1)經(jīng)??嘤诮?jīng)費不足,缺少足夠的硬件開發(fā)板和完善的軟件開發(fā)環(huán)境,相關(guān)的書籍對一些最新軟件的分析還不夠全面(2)高層次的軟件設(shè)計和開發(fā)一般不用過多考慮底層硬件的實現(xiàn)細節(jié),如果直接處于一具體的硬件環(huán)境下,在開發(fā)和研究中可能會陷入硬件的具體細節(jié)中不能自拔,而不能把精力放到高層次的軟件設(shè)計和開發(fā)上。(3)如果硬件開發(fā)環(huán)境不太穩(wěn)定(這種情況經(jīng)常見到),且對身體的硬件不是很了解,則可能在排除問題上花費大量不必要的時間,所以人們利用仿真技術(shù)來解決這

9、些問題以到達節(jié)約人力物力的目的。1.2項目介紹1.2.1虛擬化技術(shù)簡介從1965年ibm在7044機上首次實現(xiàn)虛擬技術(shù)以來,這一名詞對于計算機世界來說已經(jīng)不是一個新名詞。虛擬化是一個廣義的術(shù)語,在計算機方面通常是指計算元件在虛擬的基礎(chǔ)上而不是真實的基礎(chǔ)上運行。虛擬化技術(shù)可以擴大硬件的容量,簡化軟件的重新配置過程。虛擬化技術(shù)與多任務(wù)以及超線程技術(shù)是完全不同的。多任務(wù)是指在一個操作系統(tǒng)中多個程序同時并行運行,而在虛擬化技術(shù)中,則可以同時運行多個操作系統(tǒng),而且每一個操作系統(tǒng)中都有多個程序運行,每一個操作系統(tǒng)都運行在一個虛擬的cpu或者是虛擬主機上。當我們嘗試著理解虛擬技術(shù)時,首先必須要理解“虛擬”的

10、概念?!疤摂M”這個詞最早來源于光學(xué),用于理解鏡子里的物體。現(xiàn)在,“虛擬”這個詞已經(jīng)經(jīng)過演化,用來描述任何真實物體的模擬了,例如分區(qū)、虛擬機、虛擬內(nèi)存、虛擬磁盤和虛擬現(xiàn)實。在討論虛擬技術(shù)的時候,使用“虛擬”這個詞,是因為我們希望虛擬機看起來和工作起來都和真正的機器一模一樣。這意味著,虛擬機并不是真正的機器,但是它能像真正的機器一模一樣地工作。實際上,從原理上看,所有虛擬技術(shù)虛擬的是指令集。所有的it設(shè)備,不管是pc、服務(wù)器還是存儲,都有一個共同點:它們被設(shè)計用來完成一組特定的指令。這些指令組成一個指令集。對于虛擬技術(shù)而言,“虛擬”實際上就是指的這些指令集。虛擬機有許多不同的類型,但是它們有一個共

11、同的主題就是模擬一個指令集的概念。每個虛擬機都有一個用戶可以訪問的指令集。虛擬機把這些虛擬指令“映射”到計算機的實際指令集。虛擬化技術(shù)也與目前vmware workstation等同樣能達到虛擬效果的軟件不同,是一個巨大的技術(shù)進步,具體表現(xiàn)在減少軟件虛擬機相關(guān)開銷和支持更廣泛的操作系統(tǒng)方面。按照虛擬層所處位置的不同,目前所有的虛擬技術(shù)大致可以分為硬件虛擬、邏輯虛擬、軟件虛擬和應(yīng)用虛擬四種類型。1.2.2 cpu虛擬化技術(shù)簡介 cpu的虛擬化技術(shù)是一種硬件方案,支持虛擬技術(shù)的cpu帶有特別優(yōu)化過的指令集來控制虛擬過程,通過這些指令集,vmm會很容易提高性能,相比軟件的虛擬實現(xiàn)方式會很大程度上提高

12、性能。虛擬化技術(shù)可提供基于芯片的功能,借助兼容vmm軟件能夠改進純軟件解決方案。由于虛擬化硬件可提供全新的架構(gòu),支持操作系統(tǒng)直接在上面運行,從而無需進行二進制轉(zhuǎn)換,減少了相關(guān)的性能開銷,極大簡化了vmm設(shè)計,進而使vmm能夠按通用標準進行編寫,性能更加強大。另外,在純軟件vmm中,目前缺少對64位客戶操作系統(tǒng)的支持,而隨著64位處理器的不斷普及,這一嚴重缺點也日益突出。而cpu的虛擬化技術(shù)除支持廣泛的傳統(tǒng)操作系統(tǒng)之外,還支持64位客戶操作系統(tǒng)。 虛擬化技術(shù)是一套解決方案。完整的情況需要cpu、主板芯片組、bios和軟件的支持,例如vmm軟件或者某些操作系統(tǒng)本身。即使只是cpu支持虛擬化技術(shù),在

13、配合vmm的軟件情況下,也會比完全不支持虛擬化技術(shù)的系統(tǒng)有更好的性能。1.3項目要求綜合運用以前所學(xué)的專業(yè)知識,設(shè)計開發(fā)一個簡化的8088cpu功能模擬的演示軟件;在設(shè)計與開發(fā)中,將cpu與存儲器整合在一起的模型,1.實現(xiàn)cpu的指令系統(tǒng) 2. 實現(xiàn)cpu的時序邏輯 2 vc+6.0的編程2.1 mfc編程mfc用類編寫windows應(yīng)用程序的c+類集,以層次結(jié)構(gòu)組織起來,其中封裝了大部分windows api函數(shù)和 windows控件,而基礎(chǔ)的虛擬平臺就是在次基礎(chǔ)之上而開發(fā)出的。使用mfc類庫和visual c+提供的高度可視的應(yīng)用程序開發(fā)工具,可是應(yīng)用程序開發(fā)變的更簡單,開發(fā)周期極大地縮短

14、,提高代碼的可靠性和可重用性。它提供的類庫對程序設(shè)計的高度抽象,使得程序員不用放在程序設(shè)計的具體細節(jié)上,而是對功能的擴展上,大大簡化了開發(fā)工作。在開發(fā)過程中,我們所做的就是編寫封裝器件的程序,由平臺調(diào)用之來顯示出控件,除了編寫一些相關(guān)消息響應(yīng)函數(shù)外,大部分工作由系統(tǒng)完成。2.2 dll相關(guān)知識比較大的應(yīng)用程序都由很多模塊組成,這些模塊分別完成相對獨立的功能,它們彼此協(xié)作來完成整個軟件系統(tǒng)的工作。可能存在一些模塊的功能較為通用,在構(gòu)造其它軟件系統(tǒng)時仍會被使用。在構(gòu)造軟件系統(tǒng)時,如果將所有模塊的源代碼都靜態(tài)編譯到整個應(yīng)用程序 exe 文件中,會產(chǎn)生一些問題:一個缺點是增加了應(yīng)用程序的大小,它會占用

15、更多的磁盤空間,程序運行時也會消耗較大的內(nèi)存空間,造成系統(tǒng)資源的浪費;另一個缺點是,在編寫大的 exe 程序時,在每次修改重建時都必須調(diào)整編譯所有源代碼,增加了編譯過程的復(fù)雜性,也不利于階段性的單元測試。windows 系統(tǒng)平臺上提供了一種完全不同的較有效的編程和運行環(huán)境,你可以將獨立的程序模塊創(chuàng)建為較小的 dll (dynamic linkable library) 文件,并可對它們單獨編譯和測試。在運行時,只有當 exe 程序確實要調(diào)用這些 dll 模塊的情況下,系統(tǒng)才會將它們裝載到內(nèi)存空間中。這種方式不僅減少了 exe 文件的大小和對內(nèi)存空間的需求,而且使這些 dll 模塊可以同時被多個

16、應(yīng)用程序使用。windows 自己就將一些主要的系統(tǒng)功能以 dll 模塊的形式實現(xiàn)。3 8088cpu介紹3.1. 概述 8088是8080和8085的改進型,像8080和8085一樣,它的指令是以字節(jié)為基礎(chǔ)構(gòu)成的。它的性能的提高,主要依賴于采取了以下一些特殊措施。 1. 建立4字節(jié)的指令預(yù)取隊列 2. 設(shè)立地址段寄存器 3. 在結(jié)構(gòu)上和指令設(shè)置方面支持多微處理器系統(tǒng) 一般處理器與8088cpu處理器指令過程見圖表1 圖表 1 一般處理器與8088處理器指令執(zhí)行過程對比(a)一般處理器指令執(zhí)行過程;(b)8088處理器指令執(zhí)行過程3.2 8088cpu引線及其功能 8088cpu是一塊具有40

17、條引出線的集成電路芯片,其各引出線的定義如圖22所示。為了減少芯片的引線,有許多引線具有雙重定義和功能,采用分時復(fù)用方式工作,即在不同時刻,這些引線上的信號是不相同的,其管腳引線如圖表2。 圖表 2 8088處理器芯片引線圖3.3 8088cpu的內(nèi)部結(jié)構(gòu)8088微處理器內(nèi)部分為兩個部分:執(zhí)行單元(eu)和總線接口單元(biu),如圖表3所示。 圖表 3 8088cpu的內(nèi)部結(jié)構(gòu) 8088處理器中的內(nèi)部寄存器用戶能用指令改變其內(nèi)容的,主要是一組內(nèi)部寄存器,其結(jié)構(gòu)如圖表4所示。 1)數(shù)據(jù)寄存器 8088有4個16位的數(shù)據(jù)寄存器,可以存放16位的操作數(shù)。 2) 指針寄存器 8088的指針寄存器有兩

18、個:sp和bp。sp是堆棧指針寄存器,由它和堆棧段寄存器一起來確定堆棧在內(nèi)存中的位置。bp是基數(shù)指針寄存器,通常用于存放基地址,以使8088的尋址更加靈活。 3)變址寄存器si是源變址寄存器,di是目的變址寄存器,都用于指令的變址尋址。 4)控制寄存器8088的控制寄存器有兩個:ip,psw。ip是指令指針寄存器,用來控制cpu的指令執(zhí)行順序。 圖表 4 8088cpu的內(nèi)部結(jié)構(gòu)3.4 時序 在8088cpu中,cpu與內(nèi)存或接口間進行通信,如將一個字節(jié)寫入內(nèi)存一個單元(或接口),或者從內(nèi)存某單元(或某接口)讀一個字節(jié)到cpu,這種讀(或)寫的過程稱為一個總線周期。3.5 簡化的8088cpu

19、模型概述 本設(shè)計的設(shè)計目標是設(shè)計一個簡化的8088cpu模型,要求模型體現(xiàn)8088cpu的主要功能,省略掉其很多繁瑣的細節(jié)?;诖丝紤],簡化模型主要從如下幾個方面對8088cpu作了簡化:1 取消8088里的取指令、執(zhí)行指令流水線2 取消8088里的指令預(yù)取對列3 取消8088里管腳的分時復(fù)用功能4 將存儲器與cpu融合,簡化存儲器讀寫總線周期5 對8088的管腳也重新進行了設(shè)置。管腳設(shè)置如圖表5所示,cpu內(nèi)部功能結(jié)構(gòu)如圖表6所示: 圖表 4簡化8088cpu管腳分布 圖表 5 簡化8088cpu內(nèi)部功能結(jié)構(gòu) 3.6移植bochs仿真實現(xiàn)8088cpu功能的基本思路cpu指令系統(tǒng)和時序邏輯是

20、本設(shè)計難點,而我們解決難點采取的辦法是移植虛擬機bochs,它包含了8088下所有cpu指令的仿真函數(shù)實現(xiàn)。而且還專門預(yù)留了一個插槽庫供擴展bochs使用。bochs很龐雜,也很少文獻資料,了解bochs成為我們前期的工作。4 bochs介紹4.1 bochs概述bochs是一個x86的模擬器,它可以模擬幾乎所有類型的x86 cpu,包括16位,32位和64位(x86_64)。一個64位的x86可以看作是32位和16位x86的超集。x86_64的工作方式包括以下兩類:1,ia-32模式:包括實模式,保護模式和虛擬8086模式三個子模式。2,ia-32e模式:包括長模式和兼容模式。在bochs中

21、,用bx_cpu_c類來模擬cpu,它支持上面提到的每一種模式。4.2 類 bx_cpu_c 介紹4.2.1 主要的數(shù)據(jù)成員char name64,代表cpu的名字。unsigned bx_cpuid,cpu的id號,用于smp(對稱多處理)的機器。bx_gen_reg_t gen_regbx_general_registers,bx_gen_reg_t是一個復(fù)雜的結(jié)構(gòu)體,它表示一個64位的通用寄存器,其主要成員有:rrx:表示一個完整的64位寄存器。hrx、erx:分別表示64位寄存器的高32位與低32位,這時候64位的寄存器被分割成2個32位寄存器使用。rx:表示erx的低16位,此時寄存

22、器被當作16位寄存器使用。rh、rl:分別表示rx的高8位與低8位,此時rx被分割成2個8位寄存器。gen_reg就是一個代表通用寄存器的數(shù)組,bx_general_registers是寄存器的個數(shù),如果模擬的是64位處理器,那么bx_general_registers值為16,否則值為8。64位時通用寄存器分別是rax、rcx、rdx、rbx、rsp、rbp、rsi、rdi、r8r15;32位時沒有r8r15 。bit64u rip; bit32u eip;分別是64位模式和32位模式下的指令指示器。bx_segment_reg_t sregs6;bx_segment_reg_t是表示段寄存

23、器的結(jié)構(gòu),sregs6是表示了6個段寄存器的數(shù)組。分別是es、cs、ss、ds、fs和gs。bx_mem_c *mem;mem是指向這個cpu所使用的內(nèi)存的指針 。bx_local_apic_c local_apic;bx_local_apic是模擬本地apic的類,用于smp系統(tǒng)。 unsigned cpu_mode;就是前面提到的cpu的工作模式,主要有5種,分別是實模式(16位模式)、8086虛擬模式(32位模式下的虛擬16位模式)、保護模式(32位模式)、兼容模式(64位模式下的虛擬32位,16位模式)和長模式(64位模式)。分別使用宏bx_mode_ia32_real、bx_mode

24、_ia32_v8086、bx_mode_ia32_protected、bx_mode_long_compat和bx_mode_long_64表示。4.2.2 主要的成員函數(shù)void cpu_loop(bit32s max_instr_count)cpu_loop是一個非常重要的函數(shù),所有的指令函數(shù)都在這里執(zhí)行。參數(shù)max_instr_count表示cpu_loop執(zhí)行的最大指令數(shù)。 void prefetch(void)預(yù)取指令函數(shù),計算指令的物理地址和其他相關(guān)信息,為后面的指令譯碼作準備。unsigned fetchdecode(bit8u *iptr, bxinstruction_c *i

25、nstruction,unsigned remain)unsigned fetchdecode64(bit8u *iptr, bxinstruction_c *instruction,unsigned remain)這兩個函數(shù)用于對指令進行譯碼,前者按指令長度32位譯碼,后者按64位譯碼,參數(shù)意義分別是指令的物理地址,空白指令結(jié)構(gòu)和指令長度的最大字節(jié)數(shù)void boundaryfetch(bit8u *fetchptr, unsigned remaininginpage, bxinstruction_c *i)x86的最長指令可以達到15個字節(jié),因此指令可能出現(xiàn)跨頁,此時prefetch()+

26、 fetchdecode()/fetchdecode64()失敗,必須調(diào)用boundaryfetch()函數(shù)進行跨頁取指譯碼。4.3 bx_cpu_c 類對cpu工作流程的簡易描述cpu工作流程見圖表7 圖表 6 cpu工作流程示意圖 prefetch()函數(shù)(指令預(yù)?。﹙oid bx_cpu_c:prefetch(void) 計算laddr /指令所在的線性地址 計算paddr /經(jīng)過地址翻譯得到的指令的物理地址 計算laddrpageoffset0 /指令所在的線性頁(虛頁)的基地址 計算eippageoffset0 /rip - (laddr - laddrpageoffset0),指令

27、所在頁基 地址相對于cs的偏移 計算eippagebias / - eippageoffset0 計算eippagewindowsize /頁大小,值為4096; 計算paddra20page /paddr & 0xfffff000,指令所在的物理頁的基地址 計算eipfetchptr /通過gethostmemaddr()計算得到的指令所在頁在主機(真實機器)上的基地址所謂指令預(yù)取,就是計算指令的物理地址和其他相關(guān)信息,為后面的指令譯碼作準備。表8是其功能流程: 圖表 7指令預(yù)取功能流程圖fetchdecode()函數(shù)(指令譯碼):指令的結(jié)構(gòu)用一個類指令結(jié)構(gòu)bxinstruction

28、_c 來表示,它的兩個主要成員函數(shù)下:void (bx_cpu_c:*resolvemodrm) (bxinstruction_c *) bx_cpp_attrregparmn(1); /獲取指令的類型,類型是由bochs定義的void (bx_cpu_c:*execute)(bxinstruction_c *); /指令對應(yīng)的執(zhí)行函數(shù)指針基本指令放在一個數(shù)組中: static bxopcodeinfo_t bxopcodeinfo512*2 第0511項: 16bit mode 第5121023項: 32bit mode (其中包括了fpu,x86-64,3dnow,sse等指令入口)bou

29、ndaryfetch()函數(shù)(跨頁邊界取指)void boundaryfetch(bit8u *fetchptr, unsigned remaininginpage, bxinstruction_c *i)因為指令跨頁,不能將指令的首地址作為參數(shù)傳給fetchdecode()/fetchdecode64(),因此設(shè)立臨時變量fetchbuffer,用以保存在兩頁中取出的共15個字節(jié),并將fetchbuffer作為譯碼的參數(shù)。指令的最大長度為15字節(jié),但具體每條指令的長度是不定的,在本次取指過程中為了實現(xiàn)跨頁移動了rip,因此返回之前必須將其復(fù)原,函數(shù)返回以后,在cpu_loop()里面,會根據(jù)

30、實際的指令長度移動rip。4.4 基本內(nèi)存系統(tǒng)主要文件:memory.h, memory.cc,misc_mem.cc 主要類:bx_mem_c 內(nèi)存塊基指針:bit8u *actual_vector;/實際分配的內(nèi)存塊指針 bit8u *vector; /經(jīng)過對齊處理(4k大小整數(shù)倍 )內(nèi)存大小size_t len; /以字節(jié)為單位size_t megabytes; /以兆字節(jié)為單位 內(nèi)存空間的分配: alloc_vector_aligned (size_t bytes, size_t alignment) 圖 4-3 內(nèi)存空間分配圖 圖表 8內(nèi)存空間分布圖x86處理器的分頁機制(相關(guān)寄器)

31、:cr0:當cr0pg(表示cr0寄存器的pg位,下同)1時,啟用分頁機制。cr3:x86處理器通常使用多級頁表,cr3中存放著最高級頁表的基地址。cr4:當cr4pse1時,使用4m/2m大小的頁面,否則使用4k大小的頁面;cr4pae1時,啟用pae模式(支持36位地址空間的物理內(nèi)存)。4.4內(nèi)存的訪問 bochs中主要由下面三個函數(shù)處理內(nèi)存的讀寫操作:void access_linear(bx_address laddr, unsigned length, unsigned pl, unsigned rw, void *data)void readphysicalpage(bx_cpu_

32、c *cpu, bit32u addr, unsigned len, void *data)void writephysicalpage(bx_cpu_c *cpu, bit32u addr, unsigned len, void *data)access_linear()函數(shù)的作用是在以指定的(線性)地址為起始地址處讀/寫一塊數(shù)據(jù)。參數(shù)意義分別是,訪問的起始線性地址,讀或?qū)懙臄?shù)據(jù)長度,特權(quán)級別,操作方式(讀、寫)和數(shù)據(jù)緩沖區(qū)。readphysicalpage() 和writephysicalpage()的功能是讀/寫主機上的內(nèi)存頁。access_linear()函數(shù)struct bx_add

33、ress rm_addr; bit32u paddress1; /數(shù)據(jù)塊在第一頁的起始地址 bit32u paddress2; /數(shù)據(jù)塊在第二頁的起始地址 bit32u len1; /數(shù)據(jù)塊在第一頁的長度 bit32u len2; /數(shù)據(jù)塊在第二頁的長度 bx_ptr_equiv_t pages; /數(shù)據(jù)塊所跨越的頁數(shù)(1或2) address_xlation;address_xlation是類bx_cpu_c的一個成員,包含了經(jīng)過翻譯的地址結(jié)構(gòu)和相關(guān)信息,函數(shù)access_linear()中的參數(shù)length總是小于頁面的大小,但是數(shù)據(jù)塊的起始地址可能在頁中的任意位置,所以數(shù)據(jù)塊可能在一頁內(nèi)

34、,也可能跨越兩頁,但不會更多access_linear()函數(shù)void access_linear(bx_address laddr, unsigned length, unsigned pl, unsigned rw, void *data) if (bx_cpu_this_ptr cr0.pg) /啟用分頁 if ( (pageoffset + length) <= 4096 ) /沒有跨頁,pages1 計算paddress1和pages if (rw = bx_read) 調(diào)用readphysicalpage讀數(shù)據(jù) else 調(diào)用writephysicalpage寫數(shù)據(jù) retu

35、rn; else /跨頁,pages2 計算paddress1,len1,len2,pages和paddress2#ifdef bx_little_endian /小尾端 if (rw = bx_read) 調(diào)用兩次readphysicalpage讀數(shù)據(jù) else 調(diào)用兩次writephysicalpage寫數(shù)據(jù)#else /大尾端 #endif return; else /未啟用分頁 readphysicalpage()void readphysicalpage(bx_cpu_c *cpu, bit32u addr, unsigned len, void *data) a20addr = a

36、20addr(addr); struct memory_handler_struct *memory_handler = memory_handlersa20addr >> 20; 如果是特殊內(nèi)存段,用memory_handler完成讀操作#if bx_support_apic local_apic->read (addr, data, len) / ioapic->read (addr, data, len); #endifread_one: if ( (a20addr & 0xfff80000) != 0x00080000 ) *data_ptr = vec

37、tora20addr;inc_one: if (len = 1) return; len-; a20addr+;#ifdef bx_little_endian data_ptr+;#else / bx_big_endian data_ptr-;#endif goto read_one; . writephysicalpage()void writephysicalpage(bx_cpu_c *cpu, bit32u addr, unsigned len, void *data) a20addr = a20addr(addr); struct memory_handler_struct *mem

38、ory_handler = memory_handlersa20addr >> 20; 如果是特殊內(nèi)存段,用memory_handler完成讀操作#if bx_support_apic local_apic->write (a20addr, (bit32u *)data, len); / ioapic->write (a20addr, (bit32u *)data, len);#endifwrite_one: if ( (a20addr & 0xfff80000) != 0x00080000 ) vectora20addr = *data_ptr;inc_one

39、: if (len = 1) return; len-; a20addr+;#ifdef bx_little_endian data_ptr+;#else / bx_big_endian data_ptr-;#endif goto write_one; . 4.5 bochs 時鐘系統(tǒng)bochs的時鐘系統(tǒng)主要由pc_system.cc這個文件描述在bx_pc_system_c這個類中,定義了時鐘系統(tǒng)的各種變量和功能函數(shù)。timerbx_max_timers宏:bx_max_timers 定義為 64,timer數(shù)組所能注冊的最大計時器為64。這個數(shù)組注冊了所有的外設(shè),并且存儲了當時間片到達時對

40、應(yīng)的處理函數(shù)。struct bx_bool inuse; / 計時器是否正在使用 bit64u period; / 兩次時鐘中斷的間隔指令數(shù) bit64u timetofire; / .下一次產(chǎn)生時鐘中斷的指令數(shù) bx_bool active; / 0=非運行狀態(tài), 1=正在運行狀態(tài). bx_bool continuous; / 0=非持續(xù)型計時器, 1=持續(xù)性計時器 bx_timer_handler_t funct; / 產(chǎn)生時鐘中斷時的回調(diào)(中斷處理)函數(shù) void *this_ptr; / 回調(diào)函數(shù)所屬的類實例#define bxmaxtimeridlen 32 / 計時器最大命名長度

41、char idbxmaxtimeridlen; / 計時器命名 一些重要變量:unsigned numtimers (計時器的當前數(shù)量)unsigned triggeredtimer (當前將要處理時鐘中斷的計時器編號)bit32u currcountdown (所有運行計時器中的最小中斷間隔指令數(shù))bit64u tickstotal (總共已執(zhí)行的指令數(shù) )double m_ips (每秒執(zhí)行的百萬條指令數(shù))計時器的注冊:register_timer (void *this_ptr, void (*funct) (void *),bit32u useconds, bx_bool contin

42、uous, bx_bool active, const char *id)所有的硬件在初始化時都會調(diào)用這個函數(shù),把自己注冊到timer數(shù)組之中。4.6 bochs中斷系統(tǒng)中斷結(jié)構(gòu)如圖表10所示: 圖表 9 中斷結(jié)構(gòu) irq信號的獲取如圖表11所示: 圖表 10 irq獲取irq信號的傳遞 (pic)如圖表: 圖表 11中斷過程中斷向量的接收 (local apic): nt apic_bus_deliver_interrupt(bit8u vector, bit8u dest, bit8u delivery_mode, bit8u dest_mode, bx_bool level, bx_bo

43、ol trig_mode)中斷判斷: void bx_cpu_c:cpu_loop(bit32s max_instr_count)中斷處理: unsigned bx_cpu_c:handleasyncevent(void) bit8u bx_local_apic_c:acknowledge_int(void) 圖表 12 中斷流程圖5 具體移植實現(xiàn)5.1 虛擬實驗平臺統(tǒng)一的器件模型 圖表 13 器件模型演示圖通過對不同的管腳施加信號后,調(diào)用bochs中的cpu庫的程序來完成8088的簡單功能,為了能直觀的顯示出來,加入了一個drawobject函數(shù)。5.2 cpu類的主要功能及實現(xiàn)方法 虛擬機

44、bochs是一個龐大的工程,它包含了許多庫,例如匯編庫,反匯編庫,cpu庫,插槽庫等許多庫,而我們所以要關(guān)心就是cpu庫,而cpu庫又是一個復(fù)雜的工程,它具備了8088cpu的功能,在熟悉了解它后,決定通過修改插槽庫來調(diào)用cpu庫,這樣既能達到8088cpu的功能又能是工作量減少。5.2.1 修改cpu loop修改cpu loop首要的工作是要熟悉這個庫的內(nèi)容,通過一段時間的分析,熟悉了重要功能部分實現(xiàn)的代碼。prefetch(); eipbiased = rip + bx_cpu_this_ptr eippagebias; bxinstruction_c *i = fetchinstruc

45、tion(&istorage, eipbiased); bxexecuteptr_tr resolvemodrm = i->resolvemodrm; / get as soon as possible for speculation bxexecuteptr_t execute = i->execute; / fetch as soon as possible for speculation該部分實現(xiàn)了cpu與寄存器之間的取指令,譯碼指令,以及指令執(zhí)行的功能。5.2.2 修改插庫插槽庫的修改主要通過修改以下函數(shù)完成: void bx_instr_init(unsigned

46、 cpu) void bx_instr_shutdown(unsigned cpu) void bx_instr_reset(unsigned cpu) void bx_instr_hlt(unsigned cpu) void bx_instr_new_instruction(unsigned cpu) void bx_instr_inp(bit16u addr, unsigned len)void bx_instr_outp(bit16u addr, unsigned len) 其中,bx_instr_inp和bx_instr_outp兩上插槽函數(shù)是cpu執(zhí)行in和out指令時將會調(diào)用的函數(shù)

47、,他在實驗臺演示中有重要作用。結(jié) 論此8088cpu邏輯功能的仿真減少cpu里的一些細節(jié)特征,例如cpu與寄存器之間取指令,譯指令等一系列流水線過程都簡化了,使cpu和寄存器整和在了一起,實現(xiàn)了其主要功能,當用戶使用此仿真時容易理解,使得仿真時更加突出重點,減輕了仿真的設(shè)計實現(xiàn)難度。在工作的前期首先要了解bochs,由于bochs是一個巨大的工程,它由匯編庫,反匯編庫,cpu庫,插槽庫等許多庫組成。在前面花了大量時間來研究研究后,使我們在后期的工作中有了明確的方向,主要通過修改boshs中的cpu_loop和插槽庫。但是在后期工作遇到了很多困難,例如最難的是cpu的功能實現(xiàn),cpu功能復(fù)雜,它

48、包含函數(shù)相當多,各函數(shù)之間的調(diào)很多都不能很好的實現(xiàn)。在設(shè)計設(shè)計過程中還暴露出很多基礎(chǔ)問題,例如對工具不能熟練的掌握。通過這次畢業(yè)設(shè)計的編程,使我對bochs和8088cou有了新的認識,同時我也對vc+這一編程語言有了更深的了解,對以后的學(xué)習(xí)和工作都有很大的幫助。參考文獻1 peter abel,ibm pc 匯編語言程序設(shè)計(第五版),人民郵電出版社發(fā)行,2002.9.12 孫鑫,余安萍,vc+深入詳解,電子工業(yè)出版社,2006.063 stephen prata,c+ primer plus(第四版)中文版,人民郵電出版社,20054 steven holzner.visual c+ 6.

49、0輕松進階m.北京:電子工業(yè)出版社,2005。5 john e.swanke.visual c+mfc編程實例m.北京:機械工業(yè)出版社,2005。6 張海棠.visual c+ 6.0編程指南m.北京:航空工業(yè)出版社,2002。7 馬群生等 微計算機技術(shù) 清華大學(xué)出版社 2006.18 潘愛民等 visual c+ 技術(shù)內(nèi)幕 清華大學(xué)出版社 2001.49 10 11 /projects/bochs-rfb/致 謝在整個系統(tǒng)的開發(fā)過程中,同事、老師和同學(xué)給了我很大的幫助。感謝我的指導(dǎo)老師王中科老師他在畢業(yè)設(shè)計期間,細心為我指導(dǎo),給了我許多寶貴的意見。使我的

50、論文更加規(guī)范,更加流暢。真心謝謝!還有我要感謝全體同學(xué),他們的鼓勵和指導(dǎo)讓我受益非淺。他們?yōu)槲姨峁┝颂嗟募夹g(shù)指導(dǎo)和實踐機會。還要感謝理解,幫助,支持過我的各位朋友。最后向在百忙之中評審本文的各位專家、老師表示衷心的感謝。作者簡介姓 名:馮坷欣 性別:男出生年月:1983-08-19 民族:漢e-mail:wisely731聲 明本論文的工作是2007年2月至2007年6月在成都信息工程學(xué)院網(wǎng)絡(luò)工程系完成的。文中不包含他人已經(jīng)發(fā)表或撰寫過的研究成果,也不包含為獲得成都信息工程學(xué)院或其他教學(xué)機構(gòu)的學(xué)位或證書而使用過的材料。除非另有說明,本文的工作是原始性工作。關(guān)于學(xué)位論文使用權(quán)和研究成果知識產(chǎn)權(quán)

51、的說明本人完全了解成都信息工程學(xué)院有關(guān)保管使用學(xué)位論文的規(guī)定,其中包括:(1)學(xué)校有權(quán)保管并向有關(guān)部門遞交學(xué)位論文的原件與復(fù)印件。(2)學(xué)??梢圆捎糜坝?、縮印或其他復(fù)制方式保存學(xué)位論文。(3)學(xué)??梢詫W(xué)術(shù)交流為目的復(fù)制、贈送和交換學(xué)位論文。(4)學(xué)校可允許學(xué)位論文被查閱或借閱。(5)學(xué)??梢怨紝W(xué)位論文的全部或部分內(nèi)容(保密學(xué)位論文在解密后遵守此規(guī)定)。除非另有科研合同和其他法律文書的制約,本論文的科研成果屬于成都信息工程學(xué)院。特此聲明! 畢業(yè)設(shè)計(論文)簡化的8088cpu邏輯功能的仿真實現(xiàn)論文作者姓名:申請學(xué)位專業(yè):申請學(xué)位類別:指導(dǎo)教師姓名(職稱):論文提交日期: 簡化的8088cpu邏輯功能的仿真實現(xiàn)摘 要 “虛擬實驗平臺”主要采用以“軟”代“硬”和“虛”、“實”結(jié)合的設(shè)計思路,強調(diào)實用性,以最大限度地仿真真實的實驗環(huán)境。主要實現(xiàn)了“專用實驗臺”的虛擬化,將它“搬”到了“微機”的顯示器上,而原有在微機上的實驗操作環(huán)境和方法仍然保持不變。系統(tǒng)還提供必要的測試儀器和工具(如示波器等),以

溫馨提示

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

評論

0/150

提交評論