在 MS-DOS 7 下進行系統程式設計的第一步/介紹
介紹
如今,Windows-2000/XP 作業系統的視窗已經成為家居內飾的熟悉景象。你在那裡尋找工作和娛樂。人們很容易對能夠訪問所有東西產生一種印象。但這是一個騙人的印象:所有計算機奇蹟的真正起源是無法透過這些視窗看到的。
每個高階使用者都會意識到 Windows 作業系統設定的一道虛擬邊界,阻止他們侵入其內部事務。如果你想更深入地瞭解計算機,你必須選擇一條通往熟悉視窗之外的路。但窗戶外面是黑暗,沒有可見的支點可以支撐。如果你仍然渴望走得更遠,那麼這本書正是為你準備的。
所有計算機的奇蹟都是由程式實現的。更準確地說,是應用軟體和系統軟體的複雜互動,每個軟體都扮演著各自的角色。例如,眾所周知的 WORD 編輯器程式是一個典型的應用程式,因為它需要由 Windows 作業系統提供的執行時環境。另一方面,系統軟體是建立、配置和維護操作環境的軟體。
現在,人們對應用程式程式設計給予了極大的關注。微軟公司,Windows 作業系統的擁有者,積極推廣其 VISUAL STUDIO 軟體包,該軟體包包含幾種用於編寫應用程式的高階語言。微軟的興趣是顯而易見的:需要的 Windows 作業系統應用程式越多,銷售的 Windows 使用許可證就越多。
對系統程式設計的態度卻截然相反:領先的軟體供應商決心阻止任何競爭系統產品的出現。獲得系統資料的權利只授予可靠的商業合作伙伴,並非每家公司都能負擔得起這種支出。公認的資訊政策不鼓勵人們關注系統程式設計,但系統程式設計的重要性並沒有因此而降低。沒有系統程式設計的知識和經驗,就不能成為計算機技術領域的真正專業人士。
系統軟體不僅僅侷限於作業系統。它還包括硬體驅動程式、固定的 BIOS 程式、各種診斷和恢復服務。研究這些軟體功能一直是計算機技術教育的重要內容。傳統上,系統程式設計是在 Microsoft DOS(MS-DOS)的文件版本下基於低階組合語言(MASM 或 TASM)進行教學的。
現在,所有文件化的 MS-DOS 版本都已過時,甚至無法訪問現代計算機中使用的海量儲存介質。更新的作業系統保護自己免受任何試圖侵入其事務的嘗試,並用一個已知的錯誤訊息“您的程式執行了非法操作,必須關閉”來回應。然而,一個可接受的解決方案是存在的。它是一個未記錄的作業系統,可以安裝在現代計算機上,並允許執行任何操作。本書的主要目的是讓您瞭解該作業系統及其在解決簡單系統任務方面的應用。
防止執行不可接受的函式是透過處理器(CPU)內部的硬體實現的,並且在 CPU 以保護模式執行時處於活動狀態。除了保護本身之外,保護模式還提供了幾個重要的優勢,這就是它成為現代 CPU 主要操作模式的原因。對於應用程式和使用者來說,保護模式類似於一個虛擬外殼,它停用所有可能對作業系統重要功能造成損害的操作。這是現代作業系統固有的高可靠性的主要因素。
與保護模式相反,真實模式是一個“無防禦”模式,它使 CPU 模仿過時的處理器 i8086。人們可能會想知道為什麼這個過時的功能在每個 CPU 的下一代中都得到保留,而沒有被放棄?只有一個原因:真實模式對現代計算機系統是必要的。首先,真實模式是 BIOS 所需要的:它必須能夠自由訪問計算機硬體以執行 POST 測試。正是由於這項任務,每個處理器在每次電源開啟時都自動設定為真實模式。作業系統也不能獲得對計算機硬體的控制權,除非保護被停用,因此必須在 CPU 以“無防禦”的真實模式執行時啟動。
Windows 克隆的作業系統完全控制了計算機後,準備保護資料結構,以便在切換到保護模式後,將最高特權級別授予 Windows 作業系統本身,而使用者和應用程式則被賦予第三(最低)特權級別。從那時起,使用者將永遠無法更改這種權利分配。由於同樣的原因,在保護模式下,所有超出 Windows API 限制的機會對使用者及其應用程式都變得不可訪問。
如今,普通使用者的實踐並不意味著擁有超越保護模式固有限制的行為經驗。現代作業系統的基本概念是使用者和系統責任範圍之間的區別。過度的使用者好奇心被認為是破壞性的,應該被抑制。保護模式並沒有證明它對惡意病毒的有效性;它提供了一種有效的保護……防止你。
如果作業系統允許在真實模式下執行應用程式,它就不可能像使用保護模式的作業系統那樣穩定。這就是為什麼老式的 DOS 類作業系統被更現代的作業系統取代的主要原因。但普通的評級對經常需要無限訪問許可權的緊急服務無效。那麼,DOS 類作業系統的主要缺點就變成了它們獨特的優勢。因此,計算機專業人員並沒有忘記 DOS。所有可啟動軟盤(修復、診斷、磁碟服務等)都需要作業系統並只加載 DOS。大多數可啟動光碟也是基於 DOS 的。此外,DOS 是最簡單的作業系統,正因為如此,它最適合用於系統功能的入門學習。
雖然 DOS 通常被認為是一個真實模式作業系統,但這種觀點並不完全正確。DOS 最初在真實模式下執行,但它不會反對驅動程式 (5.04-02) 或使用者進行的模式更改。因此,您獲得了將最高特權級別分配給自己的獨特機會。只有在後一種情況下,CPU 才會服從您的任何命令,包括那些只允許在保護模式下以最高特權級別執行的命令。沒有其他作業系統會將最高許可權轉移給使用者。只有 DOS 才能在真實模式和保護模式下都為您提供完全的行動自由。
對真實模式訪問的實際需求迫使軟體供應商繼續開發 DOS 類作業系統。獨立的 FreeDOS 專案正在緩慢地走向完成 ( http://www.freedos.org/ )。最近出現了一個名為 ROM-DOS 的商業版本 ( http://www.datalight.com/ )。一些不太新的共享軟體版本也找到了感興趣的消費者。為了為過時的 DOS 版本(MS-DOS 6.22、IBM PC DOS 2000 等)提供新的屬性,包括訪問具有廣泛檔案系統 FAT-32 和 NTFS 的磁碟,編寫了大量驅動程式。但驅動程式沒有整合到 DOS 的核心,因此無法將 DOS 安裝到此類磁碟上。
如果您曾經膽敢購買一臺沒有預裝商業作業系統的計算機,您幾乎肯定會發現那裡有一個典型的 DOS 提示符和一個用 FAT-32 格式化的硬碟驅動器 (HDD)。最有可能的是,上面提到的 DOS 版本與之無關。計算機初始化通常使用微軟在 Windows-95/98 作業系統的緊急軟盤上提供的工具完成。在形式上,它被稱為“只使用命令列”的載入模式。
然而,簡單的檢查表明,“只使用命令列”模式並不像 Windows 作業系統,而更像是一個典型的 DOS 版本。在緊急軟盤上的幾乎每個檔案程式碼中,您都可以找到證據 - 一個字串“MS-DOS Version 7...” 。MS-DOS 的第 7 版正是微軟的這個未記錄的作業系統,它是本書的主要主題。對於從 Windows-95 OSR2 版本中獲取的 MS-DOS,函式 INT 21\AH=30h (8.02-22) 報告了精確的版本號 07.0Ah,或十進位制 7.10。正是這個版本在本文中被稱為 MS-DOS 7。
MS-DOS 7 不是 MS-DOS 的最新版本。Windows-ME 版本基於 MS-DOS 8。MS-DOS 8 經過重新編譯以適應現代 CPU,變得更加緊湊,但與一些 486 CPU 克隆失去了相容性。此外,它在 Windows-ME 載入過程中沒有發揮積極作用,因此無法實現不同的載入方案。但 MS-DOS 8 的其他功能與 MS-DOS 7 相似,因此本書中的大多數資料對兩者都適用。每個例外都將明確指出。
系統程式設計是一個龐大的主題;它的敘述往往會超出所有可承受的範圍。因此,本書不假裝完整:一些大型主題(特別是網路)已被有意排除在外。其他一些專案簡要提及,只要足以理解即可。
本書的第 1-4 章讓讀者熟悉鍵盤、命令列組成和內部命令。這些簡短的章節針對的是以前從未接觸過 MS-DOS 7 的新手。
第 5 章描述了計算機硬體的重要驅動程式,包括 2004-2008 年間由各種軟體供應商開發的最新驅動程式。第 6 章介紹了針對 MS-DOS 7 的一些實用程式的調查。特別關注的是程式設計工具 DEBUG.EXE - 未記錄 DOS 中記錄最差的實用程式。
第 7 章專門介紹 DEBUG 的彙編器命令。第 8 章描述了可以透過中斷在 MS-DOS 7 中呼叫的各種服務。
第 9 章提供了使用 Windows-95/98 標準版本的工具進行程式設計的示例。示例將幫助您根據需要編寫自己的可解釋和可執行檔案。提供的示例選擇說明了在 MS-DOS 7 中可用的機會範圍,如果正確提出要求。
最後一章(“A”)包含 16 個主題附錄,其中包含大量資料表格,涉及 MS-DOS 7 和 AT 相容 PC。最後一個(第 16 個)附錄是詞彙表,解釋了本書中使用的縮寫。
長期以來,領先的軟體供應商一直灌輸對作業系統進行硬性推銷,這阻礙了使用者訪問真實模式。但 OS/2(IBM,1989 年)和 Windows-NT(Microsoft,1994 年)的銷量都不佳。下一次嘗試 - Windows-2000 - 開啟了利用 FAT-32 格式化磁碟上 DOS 服務的機會。一旦 Windows-2000 的成功變得顯而易見,微軟就決定消滅整個競爭對手 Windows-95/98/ME 家族。然而,這一決定並沒有消除對真實模式的需求,也沒有提供替代的真實模式工具。我建議將微軟的這一決定視為一項保證,即您今天對 MS-DOS 7 的學習不會因明天出現任何更好的 MS-DOS 版本而白費。
2002 年,英特爾開發並開始生產 Itanium CPU,它不支援老式的 16 位機器程式碼,這為更新帶來了另一個挑戰。所有以前的真實模式工具,包括 MS-DOS 7,都可能隨著即將出現的帶有 32 位 BIOS 程式碼的新 PC 而變成垃圾,那麼這本書就不值得寫了。七年過去了,但預期中的奇蹟並沒有發生。配備 Itanium CPU 的公共 PC 還沒有出現。不得不承認,所有更新的 CPU 中保留對 16 位程式碼的支援一定是有原因的。只要這些原因存在,DOS 的經驗對您來說仍然是有益的。
如何啟動 MS-DOS 7?如果 Windows-95/98 已經安裝,只需在 PC 啟動作業系統時一直按住 F8 鍵,您就會進入引導選單;然後選擇“僅命令列”選項,您就到了。否則,您需要獲取 Windows-95/98 緊急軟盤,並使用該軟盤啟動 PC。可以在許多網際網路網站上找到可引導軟盤的合適映像,例如,在 http://www.bootdisk.com/ 。標準載入過程會讓您獲得“原始”DOS 的命令列。如果您遵循本書第 6.25 和 9.01 部分的建議,MS-DOS 7 可能會顯得更加方便和友好。第 9.11 部分建議了一些啟動 MS-DOS 7 的其他方法,包括與 Windows 作業系統共享同一個磁碟的方法。