附錄十一 使用 Microsoft Virtual PC 2007 SP1


下載與安裝

假如您想學習組合語言,最好是透過 16 位元的作業系統 ( 例如 DOS ) 學習,當然在 Windows 95/98/Me/NT/2k/XP 等 Win32 系統中經由『DOS 模式』或『命令提示字元』來學習,也是可以的。不過假如您想打造 DOS 環境,而且不想改變現有的作業系統,現在有一種叫做虛擬機器的軟體,可以達到此目的。它可以在 Windows 2k/XP 作業系統中建立虛擬機器,藉著在這虛擬機器中建立 DOS 作業系統,並且不必大幅更動現有的 Windows 2k/XP。虛擬機器軟體的種類很多,小木偶只熟悉 Microsoft Virtual PC,所以底下也只說明這個軟體。小木偶將在 Windows XP 埵w裝 Microsoft Virtual PC 2007 SP1,並在此虛擬機器埵w裝 MS-DOS 6.20 作業系統。

除了 Virtual PC 外,Qemu 和 VirtualBox 也都是很好的選擇;DOSBox 則更輕量方便,不必安裝 MS-DOS。讀者可自行試試。

Microsoft Virtual PC 的簡介可以參考維基百科的說明,到目前 ( 中華民國 98 年三月份 ) 為止,Microsoft Virtual PC 的最新版本是 Microsoft Virtual PC 2007 SP1,可以到微軟的下載中心下載,這個網頁中有兩的版本,分別用於 32 或 64 位元系統。假如您使用 Windows XP 64 bits Edition 或是 Vista/7/10 64 位元版本,才下載 64 位元版本,否則應該下載 32 位元版本。( 如果微軟的網頁遭移除,可以到 mega.co.nz,下載 32 位元,或 64 位元的 Microsoft Virtual PC 2007 SP1。)

Microsoft Virtual PC 2007 SP1 的安裝與其他軟體並無太大不同,先是歡迎畫面,按『Next>』按鈕;再來是版權說明,先勾選『I accept the terms in the lience agreement』,再按『Next>』按鈕;接著是選擇是否只有您自己可以使用 Virtual PC,或者這台電腦上的其他帳號的用戶也能使用,再按下『Next>』按鈕;最後選擇把 Virtual PC 安裝在何處,一般不須改變,安裝於預設的『C:\Program Files\Microsoft Virtual PC\』即可,故直接按『Install』按鈕。接著電腦就會開始安裝 Microsoft Virtual PC 2007 SP1 了,等待一段時間後,電腦就會出現安裝完成的畫面,按『Finish』結束即可。


在 Microsoft Virtual PC 安裝 MS-DOS

想要在 Microsoft Virtual PC 安裝 MS-DOS,得經過兩個步驟:

  1. 建立虛擬機器
  2. 在此虛擬機器中安裝 DOS 系統

建立虛擬機器

安裝完 Microsoft Virtual PC 後,按下『開始』→『所有程式』→『Microsoft Virtual PC』就可以執行 Microsoft Virtual PC。第一次執行的畫面如下圖,這是『虛擬機器控制台』:

初安裝好的 Virtual PC 控制台


在這個畫面堙A還沒有任何一架新的電腦 ( 虛擬機器 ),因此中間是一片空白,只能按下『New...』按鈕。按下『New...』按鈕後,會出現一個新的視窗,告訴你歡迎到新建虛擬機器精靈,這個精靈將幫我們完成於一台虛擬機器中建立作業系統或是加入既有的作業系統 ( 小木偶並沒有抓下此視窗的圖片 )。接著按下『Next>』按鈕後出現下圖:
建立虛擬機器
上面的視窗埵酗T個選項,由上而下分別是建立新的虛擬機器、用預設方式建立虛擬機器、加入虛擬機器。如果您剛安裝完成 Virtual PC,只能選擇第一個項目『create a virtual machine』,按下『Next>』按鈕後,接著出現設定虛擬機器名稱與位置,如下圖。在『虛擬機器控制台』堙A不是只能建立一個虛擬機器,只要您高興也可以建立 Win XP 或 Win 98SE 作業系統,不過此處我們要建立的是 DOS 作業系統,所以在編輯框中輸入虛擬機器的名稱『MS-DOS 6.20』。:
事實上我們將建立的虛擬機器作業系統上的資料都會變成檔案,而且存於實體硬碟的某處,對宿主 ( 就是安裝 Virtual PC 時的作業系統 ) Windows XP 而言會存在『C:\Documents and Setting\USER\My Documents\My Virtual Machines\MS-DOS 6.20』子目錄堙A假如想更改存放位置的話,可按『Browse...』按鈕選擇一個子目錄。此處小木偶就用預設的即可,按下『Next>』按鈕後,進入選擇作業系統的畫面,如下圖:
在 Virtual PC 2007 SP1 堙A能安裝的作業系統,可以按下『Other』複合控制項觀察,發現沒有 DOS 作業系統,但是這不影響大局,還是可以選擇『Other』,再按『Next>』按鈕,出現調整記憶體的視窗,如下圖:
調整記憶體
對 DOS 而言,不須太多的記憶體,所以選擇『Adjusting the RAM』,然後在右邊的編輯框輸入『4』或者您想給定的記憶體,不過 DOS 最多只能使用 64MB,多了也無用。接著再按下『Next>』按鈕,出現建立虛擬硬碟畫面,此處有兩個選項,對於第一次安裝 Virtual PC 的人而言,只能選擇『A new virtual hard disk』,如下圖:
虛擬硬碟
至於『An existing virtual hard disk』則是給已建立好虛擬硬碟的人使用的,我們沒有這種東西,所以只能選『A new virtual hard disk』。接著按『Next>』按鈕,出現詢問虛擬硬碟放置於實體硬碟的那一個目錄堙A以及虛擬硬碟大小的視窗。前一個問題,使用預設值即可;而後一個問題,則可選擇 250MB 的硬碟即可,如下面的畫面。據小木偶的經驗,Windows 98 SE 安裝完成,再加上 OFFICE 2000,大約只需 500MB 左右;如果僅安裝 DOS 系統大約只需 10MB 左右,預留 250MB 可以說已經足夠了。
虛擬硬碟大小及位置
按下『Next>』按鈕,電腦會顯示您所建立的虛擬機器配備報告,您的虛擬機器具有 4MB RAM、255MB 硬碟。接著按下『Finish』按鈕,就已設定好虛擬機器了,但此時尚未把 DOS 作業系統安裝於虛擬機器中,您會看到虛擬機器控制台上有『MS-DOS 6.20 Not running』的文字如下圖,但不必擔心,這是因為您的虛擬機器上的硬碟尚未經過分割、格式化,也還沒有把 DOS 系統拷貝到電腦堙C

在虛擬機器中安裝 DOS 作業系統

要在虛擬機器中安裝 DOS 作業系統,大約有分割虛擬硬碟、格式化虛擬硬碟及拷貝系統檔案兩個步驟。在『虛擬機器控制台』按下『Start』按鈕,就可以看到螢幕上出現一個視窗,與我們所熟悉的開機畫面有點相似,如下圖:

啟動虛擬電腦
這就是虛擬機器啟動了,我們可以把它想像成在我們的實體電腦堙A打開虛擬機器的電源,於是這個虛擬機器便開始做自我測試 ( POST ),接著便是啟動硬碟中的系統了,可惜這時候的虛擬硬碟堜|無任何作業系統,所以便出現了下面的畫面 ( 有時虛擬機器可能會尋找網路卡,試圖以網路開機,會花一些時間,請耐心等候 ):
這時候就必須在實體軟碟機堜庣篘擖碟機堜騅i DOS 的開機磁片 ( 三又二分之一吋的軟碟,我想大概沒人還有五又四分之一吋的軟碟片與軟碟機了吧? ) 或是光碟片,再重新啟動虛擬機器 ( 按下鍵盤右邊的 Alt 鍵不放再按下 Del 鍵 ,或者由 Action 彈出選單媬嚝 Ctrl+Alt+Del 選項,就可使虛擬機器重新開機,這相當於在實體機器中同時按下 Ctrl、Alt 不放,再按下 Del 鍵重新啟動電腦一樣 )。假如您想用 DOS 的開機磁片開機的話,先把 DOS 開機磁片插進軟碟機,再由『Floppy』彈出選單選擇『Control Physical Drive A:』,最後再重新啟動虛擬機器即可。假如您想用 DOS 的開機光碟開機,也如法炮製,不過您得選擇『CD』,再選擇其中的『Use Physical Drive X:』。

不過小木偶想現在大概很少人還有 DOS 開機磁片,幸好 Microsoft Virtual PC 2007 SP1 的開機方式也可以使用軟碟影像檔或光碟影像檔。底下小木偶介紹用軟碟影像檔開機的方法。首先在『Floppy』彈出選單中選擇『Capture Floppy Disk Image...』,如下圖:

由軟碟影像檔使虛擬機器開機
接著電腦彈出一個對話盒,選擇影像檔,MS_DOS620.IMA,如下圖:
開啟軟碟影像檔使虛擬機器開機
MS_DOS620.IMA 是所謂的軟碟影像檔,軟碟影像檔其實就是把軟碟上的每個磁區寫入一個副檔名為 IMA 或 IMZ 的檔案堙A就好像使用照相機製造出實體的影像一樣。MS_DOS620.IMA 是小木偶使用 WinImage Ver 5.0 軟體製作而成,包含 DOS 開機所必備的三個檔案 ( IO.SYS、MSDOS.SYS、COMMAND.COM )、光碟驅動程式 ( 包含 IDE 與 SATA,SATA 使用 GCDROM 驅動程式 )、DOS 常用工具 ( FDISK、FORMAT、延伸記憶體驅動程式等等 )、Microsoft Virtual PC 2007 SP1 額外驅動程式包以及 MASM 5.0,有需要的網友可按下載。

下載後可以得到一個壓縮檔,ms_dos620.rar,堶悼u有一個檔案,MS_DOS620.IMA,把它解壓縮後放到任何一個資料夾,然後選擇開啟它。接著按鍵盤右邊的 Alt 鍵不放,再按 Del 鍵,重新啟動虛擬機器,一段時間後會出現『MS-DOS 6.2 Startup Menu』,此時,DOS 就算是啟動成功了。MS-DOS 6.x 可以以不同的設定方式啟動 DOS,『SATA IDE CD-ROM』是載入 SATA 光碟機的驅動程式,『IDE CD-ROM』是載入 IDE 光碟機驅動程式,『NONE』則是不載入光碟驅動程式。您可任意選擇一個啟動 DOS,此處小木偶按鍵盤上的向下鍵到『NONE』,再按 Enter 鍵,選擇不載入任何光碟驅動程式啟動 DOS。接著要做的就是分割虛擬硬碟了,輸入『\dos\fdisk』再按下 Enter 鍵即可 ( 在 DOS 作業系統堙A指令與檔名都不分大小寫。而小木偶所製作的軟碟影像檔內的 FDISK.EXE 與 FORMAT.EXE 都在『\DOS』子目錄堙A所以執行時得先指定子目錄名稱 ),如下圖:

接著 FDISK 會出現 4 個選項:

1. Create DOS partition or Logical DOS Drive
2. Set active partition
3. Delete partition or Logical DOS Drive
4. Display partition information

第一個選項是建立 DOS 分割或邏輯硬碟。即使到了 Windows XP 時代,在 IBM 相容電腦堙A一個新的硬碟還是得先經過分割及格式化才可以使用。一個硬碟最多只能分割成四個分割,這四個分割可以是 3 個主要分割 ( primary partition ) 再加上一個延伸分割 ( extended partition ),也可以是 4 個主要分割。延伸分割最多只能一個,不過延伸分割媮晱i以再建立許多個邏輯硬碟 ( logical drive )。而 DOS 只能安裝到主要分割,而且進入 DOS 後,也只能見到一個主要分割,也就是 C: 磁碟 ( 如果您有兩個硬碟,DOS 也只能裝在第一個硬碟的主要分割,第二個硬碟的第一個主要分割會被認為是 D: 磁碟 )。如果您只有一個硬碟,但是想要在 DOS 堥洏峔潃蚨牬苤A那只有把硬碟分成一個主要分割和一個延伸分割,而且把這個延伸分割都分配給一個邏輯硬碟。不過此處,小木偶只把虛擬硬碟分成一個主要分割就好了,因此按下 1 再按 Enter 鍵。( 在 FDISK 程式堙A如果按錯了,可以立即按 Esc 鍵回到原來的畫面 )

這時又會出現三個選項:

1. Cretae Primary DOS Partition
2. Create Extended DOS Partition
3. Create Logical DOS Drive(s) in the Extended DOS Partition

我們選擇 1,再按 Enter 鍵,FDISK 會詢問是否要把所有的硬碟空間都分配給這個主要分割而且使這個分割能夠 active?按 Y 鍵,再按 Enter 鍵,表示 Yes。接著 FDISK 就會幫我們把硬碟分割好了,這時虛擬機器已經加入了一個可用的硬碟,而 DOS 尚未能識別,所以得重新開機,按任意鍵重新開啟虛擬機器。

重新開啟虛擬機器後,和先前一樣,小木偶選擇『NONE』,不載入光碟驅動程式。上面已經完成分割硬碟,接著要做的是格式化硬碟。然後在 DOS 的命令提示符號,A>,輸入『dos\format c:/s/v:ms_dos_620』再按 Enter 鍵,這樣做的目的是格式化 C: 磁碟機。加上『/s』是指示 FORMAT 程式把系統檔案 ( IO.SYS、MSDOS.SYS、COMMAND.COM ) 拷貝到 C:,並把 C: 的啟動磁區填入正確的啟動資料,這樣我們就能以硬碟啟動 DOS 了 ( 您看!要啟動 DOS 多麼簡單,就只要這三個檔案及啟動磁區而已 )。加上『/v:ms_dos_620』是在 C: 加上為了填上磁碟卷名,不加此參數也可以。然後 FORMAT 會提出警告,說這樣做 C: 碟上的資料會消失是否要繼續處理,但我們不理會這訊息,仍然按『Y』鍵,一段時間後就格式化完成。

拷貝 MASM 5.0 到虛擬硬碟中

接下來可以把軟碟片 A: 上面的 MASM 5.0 拷貝到 C: 磁碟機上了,做法如下。這時會用到一些 DOS 指令,您可以參考附錄三

A:\>c: [Enter]

C:\>md masm50 [Enter] →在 C:\ 建立 MASM50 子目錄

C:\>cd masm50 [Enter] →切換到 C:\MASM50 子目錄

C:\MASM50>copy a:\masm50 [Enter] →把 A:\MASM50 子目錄的所有檔案拷貝到 C:\MASM50
A:\MASM50\DDEB.TXT
A:\MASM50\DEBUG32.TXT
A:\MASM50\DDEB.EXE
A:\MASM50\DEBUG.EXE
A:\MASM50\LINK560.EXE
A:\MASM50\DEBUG32.EXE
A:\MASM50\LIB.EXE
A:\MASM50\MASM.EXE
A:\MASM50\LINK.EXE
A:\MASM50\MAPSYM.EXE
A:\MASM50\SYMDEB.EXE
A:\MASM50\EXE2BIN.EXE
       12 file(s) copied
C:\MAMS50>

到此為止,小木偶已經完成在虛擬機器安裝好 MS-DOS 6.20 了。假如您想使用光碟機,可以再把光碟驅動程式以及 DOS 常用工具拷貝到 C: 上,操作方式如下:

C:\MASM50>cd \ [Enter] →切換到 C: 碟的根目錄,在 DOS 中,某磁碟的根目錄都以『\』表示,X: 表示磁碟機

C:\>copy a:\autoexec.bat [Enter] →拷貝 A:\AUTOEXEC.BAT 檔案到 C:\,AUTOEXEC.BAT 是啟動 DOS 之後,會自動執行的批次檔
        1 file(s) copued

C:\>copy a:\*.sys [Enter] →拷貝 A:\ 中所有副檔名是『.SYS』的檔案到 C:\
A:\GCDROM.SYS
A:\TEAC_CDI.SYS
A:\CONFIG.SYS
        3 file(s) copied

C:\>md dos [Enter] →在 C:\ 建立 DOS 子目錄

C:\>copy a:\dos dos[Enter] →拷貝 A:\DOS 子目錄中的所有檔案到 C:\DOS 
A:\DOS\ATTRIB.EXE
A:\DOS\CHKDSK.EXE
A:\DOS\EMM386.EXE
A:\DOS\FDISK.EXE
A:\DOS\FORMAT.EXE
A:\DOS\HIMEM.SYS
A:\DOS\MEM.EXE
A:\DOS\MSCDEX.EXE
A:\DOS\SYS.COM
A:\DOS\XCOPY.EXE
A:\DOS\UNDELETE.EXE
       11 file(s) copied

C:\>

Virtual PC 2007 SP1 虛擬硬碟和實體硬碟分享檔案

雖然我們可以把自己撰寫的原始程式等資料放在虛擬磁碟上,但是也時候卻會想如果放在實體硬碟上,就可以用 Windows 上的應用程式,如 UltraEdit 32,編輯,這樣會很方便。這時候,就需要實體硬碟與虛擬硬碟分享功能了,Microsoft Virtual PC 2007 SP1 的做法是加掛驅動程式。這個驅動程式放在實體硬碟的『C:\Program Files\Microsoft Virtual PC\Virtual Machine Additions\VMAdditions.iso』檔案堙AVMAdditions.iso 是一個光碟影像檔,其中的『\DOS\FSHARE.EXE』檔案就是實體硬碟與虛擬硬碟的驅動程式,在『\DOS』子目錄媮晹釣銗L的驅動程式,包含光碟機、滑鼠及延伸記憶體等等。小木偶也把它們拷貝出來,放到 MS_DOS620.IMA 影像檔堣F。因此我們要做的事就是把它們拷貝到虛擬硬碟中,然後再執行它:

C:\>md VMDOSADD [Enter] →建立 C:\VMDOSADD 子目錄

C:\>copy a:\vmdosadd vmdosadd [Enter]
A:\VMDOSADD\CDROM.SYS
A:\VMDOSADD\FSHARE.EXE
A:\VMDOSADD\IDLE.COM
A:\VMDOSADD\VMADD386.SYS
A:\VMDOSADD\MOUSE.SYS
        5 file(s) copied

C:\>vmdosadd\fshare [Enter] →執行 FSHARE
Virtral Machine Folder Sharing
Copyright (C) 2004 Microsoft Corporation.  All rights reserved. →出現這兩行,表示已成功載入分享驅動程式

C:\>

接著在 MS-DOS 6.20 視窗內的 Edit 彈出選單中選擇 Settings,開啟設定視窗,如下圖:

設定視窗會告訴您當虛擬機器啟動後,有些設定更動後暫時會無效,必須下次重新啟動虛擬機器才能生效,如下圖。但是在小木偶的電腦上,改變分享實體硬碟與虛擬硬碟上的資料並不須重新啟動虛擬機器就可生效。
現在按下『OK』按鈕關閉它,底下的視窗就會顯現出來。把滑鼠移到對話盒左邊的倒數第三個『Shared Folders』( 分享資料夾 ) 再按滑鼠左鍵一下,對話盒右邊的『Shared Folders』列表便會出現,如下圖。但此刻尚未指定分享資料夾,所以右半部的表是空的:
再用滑鼠選按右邊的『Share Folder...』按鈕,就會出現選擇『瀏覽資料夾』對話盒,如下圖。這時我們可以選擇要與虛擬機器共享的實體硬碟或實體硬碟上的資料夾。在 Microsoft Virtual PC 2007 SP1 堙A被分享的實體硬碟或實體硬碟上的資料夾都會被賦予一個磁碟機代號,這個磁碟機代號會被虛擬機器使用,它可以用位於『瀏覽資料夾』對話盒的左下角的『Drive letter』複合控制項指定。假如您想每次啟動『MS-DOS 6.20』虛擬機器時,都分享實體硬碟上的這個資料夾,也可以勾選此對話盒右下角的『Share every time』檢驗盒。此處小木偶打算實體硬碟的 E:\HomePage\SOURCE 子目錄分享給虛擬機器,而 E:\HomePage\SOURCE 子目錄在虛擬機器的代號為 E:,如此一來,每當小木偶在 Windows XP 系統中編輯實體硬碟的『E:\HomePage\SOURCE\』中的某個檔案,同時虛擬硬碟的『E:』碟中也能看見到該檔案。最後按『確定』按鈕結束『瀏覽資料夾』對話盒。如下圖:
這時就會出現下圖原來的對話盒,但是小木偶使實體硬碟的『E:\HomePage\SOURCE』設為虛擬硬碟的『E:』,所以右邊的表格多了一項,如下圖。如果您還想把另外的資料夾與虛擬機器分享,那麼就重複上面步驟。最後按『OK』結束。
此刻如果您切換到 E:\,應該不會有問題了。我們試試看把虛擬機器的 C:\AUTOEXEC.BAT 拷貝到 E:,如下圖。AUTOEXEC.BAT 是一個 DOS 開機後就會自動執行的批次檔,如果每次開啟 MS-DOS 6.20 虛擬機器都要執行 FSHARE.EXE 一次,是很麻煩的一件事,因此小木偶打算把 FSHARE.EXE 加入 AUTOEXEC.BAT 堙A讓它能在開啟虛擬機器時自動執行,所以把它拷貝到虛擬機器的 E:\,也就是實體硬碟的 E:\HomePage\SOURCE。如下圖。
接著用 UltraEdit 32 或其他文書處理軟體開啟 E:\HomePage\SOURCE\AUTOEXEC.BAT 檔案,在 :EXIT 後加上『vmdosadd\fshare』,如下圖。:EXIT 是批次檔標記的用法,『:』後面接著的是標記名稱,恰與組合語言相反。AUTOEXEC.BAT 應不難理解,第一行,『GOTO %CONFIG%』是指依照 CONFIG.SYS 中,使用者在開機三個選項所選擇的開機方式跳到『:SATAIDE』、『:IDE』或『:NONE』。如果您開機時選擇『NONE』,就會跳到『:NONE』標記處,然後遇見『:EXIT』標記,不管它,然後就是執行『vmdosadd\fshare』程式,接著就結束了。如果您開機時選擇『:IDE』,就會跳到『:IDE』標記處,執行『\DOS\MSCDEX』,這是載入光碟機的程式,後面的『/D:IDECD00 /L:G』是其參數,您可以修改『/L:G』的『G』變為其他字母,這樣光碟機代號就會改變了。
最後存檔,然後再把 E:\AUTOEXEC.BAT 拷貝到 C:\ 堙A如下圖。那麼下回啟動 MS-DOS 6.20 虛擬機器時,就會自動執行虛擬硬碟 C:\AUTOEXEC.BAT 了,而 FSHARE.EXE 也能自動執行了,分享的資料夾也會自動設定好了。


在虛擬機器 MS-DOS 6.20 系統堬桫隅籀s結

底下小木偶將飾演如何在組譯虛擬機器堛 DOS 組譯及連結程式。以第一章的例子,EXAM01.ASM,作為範例,小木偶將把它組譯及連結。下圖是組譯及連結的步驟:

EAM01.ASM 組譯及連結的步驟

第一步是設定路徑,因為 MASM.EXE、LINK.EXE、EXE2BIN.EXE 都在 C:\MASM50 子目錄堙A為了下面步驟可以省略指定組譯器、連結器所在的子目錄,所以事先設定路徑。

第二步、第三步是組譯與連結,MASM.EXE 與 LINK.EXE 的用法可以參考第一章

第四步是把 EXAM01.EXE 轉換成 EXAM01.COM。

最後一步是執行 EXAM01.COM。到此就大功告成了。

假如您在虛擬機器的 DOS 中,以 MASM 6.x 組譯連結 EXAM01.ASM 的步驟如下圖:

一般而言,安裝好 MASM 6.x 版時,組譯器、連結器等可執行檔都放在 『C:\MASM611\BIN』,所以第一步設定路徑時別忘了要加『BIN』,其餘大致都相同。


後記

可能會有人問,既然 Windows 9x/Me 的『MS-DOS 模式』或 XP/Vista/7 的『命令提示字元』均可組譯原始碼,何必在虛擬機器中組譯呢?我想原因是這樣的,Windows XP/Vista/7 的命令提示字元不能顯示中文,假如您的原始碼中有中文訊息,那麼在 Windows XP/Vista/7 就無法看見中文了;而 Windows 9x/Me 的 MS-DOS 模式倒是能顯示中文。

那麼在 Windows XP/Vista/7 中安裝好 Microsoft Virtual PC 2007 SP1 後,要如何使虛擬機器的 MS-DOS 顯示中文呢?這時就得在 MS-DOS 埵w裝倚天中文或是其他中文系統。底下是小木偶把 EXAM01.ASM 堛

mes     db      'Hi, I learn assembly.$'    ;07.要印出的訊息

改成

mes     db      '嗨!我學組合語言!$'       ;07.要印出的訊息

再重新組譯連結,最後執行的畫面: