程式的前世今生
4.1 程式設計
彙編語言程式中,包含兩種指令:
- 彙編指令:是有對應的機器碼的指令,可以被編譯為機器指令,最終為CPU所執行。
- 僞指令:沒有對應的機器指令,最終不被CPU執行,由編譯器來執行,編譯器根據僞指令來進行相關的編譯工作。
- segment 和 ends 是一對成對使用的僞指令,這是在寫可被編譯的彙程式設計式時,必須要用到的一對僞指令。
- segment 和 ends 的功能是定義一個段,segment 說明一個段開始,ends說明一個段結束。
- end是一個彙程式設計式的結束标記,編譯器在編譯彙程式設計式的過程中,如果碰到了僞指令 end,就結束對源程式的編譯。
- assume這條指令的含義為假設。它假設某一段寄存器和程式中的某一個用segment...ends定義的段相關聯。通過assume說明這種關聯,在需要的情況下,編譯程式可以将段寄存器和某一個具體的段相聯系。
- 彙程式設計式中,除了彙編指令和僞指令外,還有一些标号,比如在segment的前面,最為一個段的名稱,這個段的名稱最終将被編譯,連結程式處理為一個段的段位址。
程式傳回就是将CPU的控制權交還給使用它得以運作的程式。
程式傳回指令:
mov ax,4c00h
int 21h
4.2 編譯
編譯的過程中,源檔案最多可以輸出:
- 目标檔案(.obj): 包含機器代碼。
- 清單檔案(.lst): 包括了程式源檔案的副本,再加上行号、每條指令的數字位址、每條指令的機器代碼位元組(十六進制)以及符号表。
- 交叉引用檔案(.crf): 它是為一個源程式所引用的各種符号進行前後對照的檔案,主要用于給出不同檔案段中互相引用的全部符号表。
4.3 連結
- 當源程式很大時,可以将它分為多個程式檔案來編譯,每個源程式編譯成為目标檔案,再用連結程式将他們連結到一起,生成一個可執行檔案;
- 程式中調用了某個庫檔案中的子程式,需要将這個庫檔案和該程式生成的目标檔案連接配接到一起,生産一個可執行檔案。
- 一個源程式編譯後,得到了存有機器碼的目标檔案,目标檔案中的有些内容還不能直接用來生成可執行檔案,連接配接程式将這些内容處理為最終的可執行資訊。是以在隻有一個源程式檔案,而又不需要調用某個庫中的子程式的情況下,也必須用連接配接程式對目标檔案進行處理,生成可執行檔案。
4.4 運作
