寫程式並不難,但要寫出優雅、高效的好程式卻非易事。這恰似繪畫:人人皆能揮毫,但作品卻有天壤之別。欲成為優秀的「程式畫家」,首要具備觀察與分析能力,將雜亂需求梳理為清晰邏輯(程式分析),再規劃模組架構與執行順序(流程設計),方能落筆生花。
畫家分等級:頂尖大師重風格、兼技巧與素養;職業畫師靠紮實工筆求生存;最差劣的畫匠只會抄襲模仿,毫無創造力。程式設計師亦同:若只會填寫指令、人云亦云,不過是「程式匠」罷了。本書旨在透過組合語言訓練,讓讀者掌握「工筆畫」級的精準技藝——在電腦領域,嚴謹的工筆價值遠超隨意的寫意。
程式由定義與指令組成,需經 .asm 原始檔 → masm.exe 編譯為 .obj 目的檔 → link.exe 聯結為 .exe 執行檔(或經 exe2bin.exe 轉為 64KB 內的 .com 命令檔)。程式設計師必須熟稔每個環節細節。
為提高效率與可維護性,程式結構應模組化:
CALL 調用,參數透過暫存器或緩衝區傳遞,須預先獨立測試。命名需具代表性,檔案不宜過大,磁盤應建立專屬子目錄分類管理。此外,緩衝區定義與使用長度必須一致,段值變更時需加寫 ASSUME 前置定義(如 BYTE PTR、WORD PTR),確保編譯聯結安全。
電腦世界中,所有資料皆由二進位構成。二進位本質是「開關」組合:n 個位元可產生 2ⁿ 種狀態。善用此特性,可將功能映射至位元組合,達到極致精簡。例如螢幕色彩編碼:一個位元組(8 位元)分配給三原色與亮度,僅 8 個開關即編碼出 256 種色彩。
資料結構設計應以 8 的倍數(位元組)為基本單位,若無法自然對齊,必須人為整理結構,這就是「資料結構」的核心價值。十六進位(以 H 結尾)是觀察二進位的便利窗口,程式設計師須熟練掌握二、八、十、十六進位互轉。
暫存器如畫家的調色盤,資料是顏料。8088 CPU 暫存器稀缺,善用與否決定程式效能高下。切忌濫用緩衡區搬運資料,浪費速度與空間;應將高頻、關鍵資料長駐暫存器,善用其容器功能(運算邏輯)與定址功能(記憶體存取)。
暫存器分六類,各有專屬職掌:
CS、DS、SS、ES 指向程式、資料、堆疊、附加段基址(實體位址 = 段值×16 + 偏移)。SP(堆疊指標)、BP(基址指標),SP、FLAG、IP 屬「值」類,非必要勿動。SI(源索引,指向 DS)、DI(目的索引,通常指向 ES,大量搬移時專用)。AX(累加器,乘除、I/O 效能最強)、BX(基址,唯一可直接記憶體定址)、CX(計數器,迴圈專用)、DX(資料暫存器,I/O 操作輔助)。皆可拆分高低位(如 AH/AL)。原則:AX 打雜靈活、BX 專司定址轉換、CX 專心計數、DX 固定存放高頻資料。嚴守分工,程式才條理分明、高效穩定。