4. 4
範例 9.1 三種虛擬機的組合語言
(a) 記憶體機 (b) 暫存器機 (c) 堆疊機
= 0 sum
= 0 i
FOR0:
CMP i 10
J > _FOR0
+ sum i T0
= T0 sum
+ i 1 i
J FOR0
_FOR0:
RET sum
LDI R1, 0
ST R1, sum
LDI R2, 0
ST R2, i
LDI R3, 1
LDI R4, 10
CMPR2, R4
JGT _FOR0
ADD R1, R1, R2
ADD R2, R2, R3
JMP _FOR0
ST R1, sum
RET
i: RESW 1
sum:RESW 1
PUSH 0
POP sum
PUSH 0
POP i
FOR0:
PUSH i
PUSH 10
CMP
PUSH _FOR0
JGT
PUSH sum
PUSH i
ADD
POP sum
PUSH i
PUSH 1
POP i
_FOR0:
PUSH sum
RET
i: RESW 1
sum:RESW 1
在範例 9.1 的 (b) 欄當中,顯示了 CPU0 的組合語言,由於 CPU0 是一個以暫
存器為主的處理器,因此只要寫一個程式以解譯 CPU0 的指令集,就相當於實
作了一個暫存器機。
在範例 9.1 的 (c) 欄當中,所顯示的組合語言就是我們所未曾見過的了,這種組
合語言相當特別,除了 PUSH 與 POP 之外,其他指令幾乎都沒有參數,而這也
正是堆疊機的主要特性,將所有參數都存入堆疊當中,然後才進行運算。以下,
我們將更詳細的說明堆疊機的架構與運作原理。
堆疊機
圖 9.2 顯示了堆疊機的架構圖,在堆疊機的 CPU 中,有一個理論上容量無限的
14. 14
public static void main(java.lang.String[]);
Code:
0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3; //String Hello World!
5: invokevirtual #4;//Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
}
9.5 實務案例(二):微軟的 VirtualPC 虛擬機
在 Intel x86 電腦上常用的硬體虛擬機有 VMWare、Virtual PC 與 Virtual Box 等,
其中,VMWare 功能較強大,但是需要付費購買,而 Virtual PC 與 Virtual Box 則
完全免費,在本節當中,我們將使用 Virtual PC 作為範例,說明系統虛擬機的用
法。
圖 9.8 顯示了利用 Virtual PC 虛擬機在 Windows XP 作業系統當中執行 Red
Hat Linux 9.0 的情況。此時,Red Hat Linux 9 在 Windows XP 系統當中看起來像
是一個應用程式,但實際上卻是一個完整的作業系統,只是其畫面並沒有占據整
個螢幕而已,利用此種方式,我們可以在『宿主作業系統』的環境下『安裝』另
一個『寄生作業系統』,而此『寄生作業系統』看起來就好像只是一個應用程式
一般,但其運作行為與一個單獨的作業系統幾乎一模一樣。
15. 15
圖 9.8 在 Microsoft Windows 當中以 Virtual PC 軟體執行 Red Hat 9.0 的情況。
為了展示虛擬機的使用過程,我們將在 Windows XP 當中,以 Virtual PC 安裝一
個寄生的 『DOS 作業系統』,以便說明虛擬機的使用方式。
選擇以『DOS 作業系統』的原因是,DOS 系統相當的小,因此安裝過程快速,如
此,可以方便使用者練習 Virtual PC 的使用方式。而且,由於 DOS 作業系統乃
是一個簡易的作業系統,沒有安全保護機制,因此,對於開發新作業系統的人員
而言,是一個很好的練習平台,因此,我們將以 DOS 系統作為練習對象。
首先,請讀者從網路上下載 Virtual PC 2007 的版本1,安裝後請啟動之,讀者會
看到如圖 9.9 的 Virtual PC Console 啟動視窗。
1 您可以從網址 http://www.microsoft.com/windows/downloads/virtualpc/default.mspx 當中下載
Virtual PC 2007, 筆者下載日期為 2009-03-17。
16. 16
圖 9.9 Virtual PC 的啟動視窗
接著,請按下 New 按鈕,此後,會有一連串的選擇畫面,所有選項都請以預設
值設定即可,但是在虛擬機儲存檔中您可以將檔案命名為 DOS 6.22.vmc,如圖
9.10 所示,以方便辨識。
圖 9.10 Virtual PC 虛擬機的存檔畫面
接著,在 Virtual Hard Disk Options 畫面時,請選取 A new virtual hard disk,如此,
才會建立一個新的虛擬硬碟,請讀者參考圖 9.11 的設定。最後,按下 Finish 完
成後,即建立的一台新的虛擬機器。
17. 17
圖 9.11 選擇 A new virtual hard disk 以建立新的虛擬硬碟。
然而,到目前為止,我們所建立的虛擬機器是不具有作業系統的『硬體』模擬機,
要在 Virtual PC 當中安裝 DOS 作業系統,首先我們必須取得 DOS 的開機磁片
(軟碟片),但是,這對許多今日的電腦使用者而言,將會是一大困擾。因為,
現在許多電腦都已不再具有軟碟機了。還好,在 Virtual PC 當中,不需要軟碟機
也可以安裝 DOS 系統,只要先取得 DOS 開機磁片的映像檔即可,此硬像檔可
以在網路上輕易的下載取得2。
當您取得 DOS 開機映像檔 (例如: 622C.IMG) 之後,請先於 Virtual PC Console
中,按下 Start 按鈕,啟動方才所建立的『硬體』虛擬機,如圖 9.12 所示。
2在 bootdisk 這個網站的網頁 http://www.bootdisk.com/bootdisk.htm 當中,可以取得下列壓縮檔
http://s93616405.onlinehome.us/bootdisk/622c.zip,解壓縮後即有 622C.IMG 此一軟碟映像檔, 筆
者下載日期為 2009-03-17。
18. 18
圖 9.12 請按下 Start 鍵啟動 DOS 虛擬機
此時的狀況,就好像您將一台未安裝作業系統的電腦開機一樣,其畫面如圖 9.13
所示。
圖 9.13 Virtual PC 的虛擬機之啟動畫面
此時,您必須先插入安裝磁片或光碟,才能將作業系統安裝上去。但是,由於我
們想要利用軟碟映像檔安裝 DOS,而不是從真正的軟碟機安裝,因此,我們可
以選擇 Floppy/Capture Floppy Disk Image,並選取 DOS 的開機映像檔,以便指
19. 19
定由該映像檔開機,如圖 9.14 所示,然後按下 Action/Reset 以重新開機,如此,
就完成了 DOS 系統的虛擬機設定動作了。
圖 9.14 在 Virtual PC 中指定 DOS 的軟碟開機映像檔
按下 Action/Reset 之後,您將會看到系統進入如圖 9.15 的 DOS 開機畫面,對
於曾經使用過 DOS 的讀者而言,應該會覺得有似曾相識的感覺。沒錯,這就是
那個 1980 年代的 DOS 作業系統了。