首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

王爽《匯編語言》實踐:構建極簡 C 編譯環境

     編輯:關於C語言

《匯編語言》綜合研究一:在 DOS 虛擬機中構建 TC2.0 極簡編譯環境

本文記錄依照王爽《匯編語言》綜合研究一的指導,在虛擬機 DOS 環境中,從完整 TC2.0 安裝目錄中剝離出僅含核心編譯鏈接功能的極簡環境,並驗證各檔案作用的完整過程。

實驗環境準備

  1. 使用 WinImage 建立 2.88MB 虛擬軟盤映像
  2. 將 TC2.0 完整目錄複製至軟盤根目錄
  3. 在 DOSBox/虛擬機掛載軟盤為 A: 驅動器

極簡環境構建步驟

  1. 在 C: 建立 MINIC 目錄
  2. 僅複製 TC.EXE 至 MINIC
  3. 啟動 TC.EXE,清除所有目錄設置 (Options → Directories 全清空)
  4. 編寫測試程式 SIMPLE.C
  5. 編譯生成 SIMPLE.OBJ 成功
  6. 鏈接階段報錯 Unable to open input file 'C0S.OBJ'

逐步補全鏈接必需檔案

依據報錯提示,依次從原 TC 目錄複製以下檔案至 MINIC:

  1. C0S.OBJ - 啟動代碼 (程式入口、堆疊初始化)
  2. EMU.LIB - 浮點模擬庫 (無 FPU 時軟體模擬浮點運算)
  3. MATHS.LIB - 數學函數庫 (sin, cos, sqrt 等)
  4. GRAPHICS.LIB - 圖形庫 (BGI 圖形函數)
  5. CS.LIB - 標準 C 運行庫 (printf, malloc, strcpy 等核心函數)

補全後再次編譯鏈接,成功生成 SIMPLE.EXE 並正常運行。

核心發現與驗證

檔案作用是否必需
TC.EXE編譯器驅動程式 (內含預處理、編譯、調用鏈接器)是
TLINK.EXE連結器 (由 TC.EXE 自動調用)是
C0S.OBJSmall Model 啟動模組是
CS.LIB標準 C 庫 (I/O、字符串、記憶體、進程控制)是
EMU.LIB浮點模擬 (無 8087/287/387 時必需)視硬體而定
MATHS.LIB數學庫函數用到數學函數時必需
GRAPHICS.LIBBGI 圖形庫用到圖形函數時必需
INCLUDE/標準頭文件 (stdio.h 等)編譯期必需,運行期不需

TC.EXE 搜索路徑機制驗證

實驗證明:TC.EXE 不會 自動搜尋 A:\ (軟盤根目錄) 作為庫文件路徑。若未在 Options→Directories 設定 Library Directories,且庫文件不在 TC.EXE 所在目錄,鏈接將失敗。這驗證了書中將文件複製到 D:\TC2.0 而非依賴當前目錄的做法。

未解決疑問

  • TC 目錄下其他 .EXE (如 TURBO.EXE IDE、TD.EXE 調試器、MAKE.EXE、GREP.EXE 等) 的具體定位與關係
  • TLIB.EXE 庫管理工具的使用場景

心得體會

  1. 精簡即本質:龐大的 IDE 安裝目錄中,核心編譯鏈接僅需十幾個檔案。其餘為開發體驗 (IDE、調試、幫助)、擴展功能 (圖形、數學)、文檔範例服務
  2. 系統完整性代價:為穩定性、易用性、標準合規,必須引入大量「非核心」組件。最小系統能跑通,但不等於生產可用
  3. 檔案與記憶體同構:.OBJ、.LIB、.EXE 皆為二進制位元組序列,區別在於連結器與載入器的解釋方式。同樣的代碼/數據,在檔案中是段/節,載入記憶體後成段/頁

延伸閱讀建議

  • 《匯編語言》(王爽) — 16 位實模式入門首選,配套實驗極佳
  • 《C 程序設計》(第 4 版, 美) — 現代 C 風格與良好習慣
  • 《Intel 匯編語言程序設計》(第 5 版) — 32/64 位保護模式系統性教材
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved