把組合語言書寫的程式翻譯成與之等價的機器語言程式的翻譯程式。組合語言程式輸入的是用組合語言書寫的根源程式,輸出的是用機器語言表示的目的程式。組合語言是為特定電腦或電腦系列設計的一種面向機器的語言,由彙編執行指令和彙編虛擬指令組成。彙編執行指令是機器指令的符號化表示,其操作碼用記憶符表示,位址碼直接用標號、變數名字、常數等表示。彙編執行指令經組合語言程式翻譯為機器指令,二者之間基本上保持一一對應的關係。彙編虛擬指令又稱作彙編指示,用於向組合語言程式提供用戶自定義的符號、數數據的類型、數據空間的長度,以及目標程序的格式、存放位置等提示性信息,其作用是指示匯編程序如何進行匯編。采用匯編語言編寫程序雖不如高級程序設計語言簡便、直觀,但是匯編出的目標程序占用內存較少、運行效率較高,且能直接引用計算機的各種設備資源。它通常用於編寫系統的核心部分程序,或編寫需要耗費大量運行時間和實時性要求較高的程序段。

  發展過程 匯編程序的雛型是在電子離散時序自動計算機 EDSAC上研制成功的。這種系統的特征是用戶程序中的指令由單字母指令碼、十進制地址和終結字母組成。第一個匯編程序是符號優化匯編程序(SOAP)系統,它是50年代中期為IBM650計算機研制的。這種計算機用磁鼓作存儲器,每條指令指出後繼指令在磁鼓中的位置。當初研制SOAP系統的動機不是引入匯編語言的符號化特色,而是為瞭集中解決指令在磁鼓中合理分佈的問題,以提高程序的運行效率。IBM704計算機的符號匯編程序(SAP)是匯編程序發展中的一個重要裡程碑。此後的匯編程序大都以這一系統為模型,其主要特征至今未發生本質的變化。隨著計算機軟件的高速發展和廣泛應用,匯編程序又吸收瞭宏加工程序、高級語言翻譯程序等系統的一些優點,相繼研制出宏匯編程序、高級匯編程序。

  分類 匯編程序分為簡單匯編程序、模塊匯編程序、條件匯編程序、宏匯編程序和高級匯編程序等。

  簡單匯編程序 又稱“裝入並執行”式匯編程序。由於簡便而得到廣泛使用。這種匯編程序的特點是匯編後的機器語言程序直接放在內存之中準備執行。目標程序所占據的存儲位置是在匯編時固定的,並且以後不能改變,所以這種工作方式不能將多個獨立匯編的子程序合並為一個完整的程序,而且隻能調用位置與目標程序不沖突的程序庫中的子程序。

  模塊匯編程序 為適應模塊程序設計方法而研制的。它除瞭克服簡單匯編程序的缺點之外,還提供並行設計、編碼和調試不同程序模塊的能力,而且更改程序時隻更改有關的模塊即可。每個匯編後的程序模塊稱為目標模塊,多個目標模塊經連接裝配程序組合成一個完整的可執行的程序。

  條件匯編程序 主要特點是具有選擇匯編某些程序段的能力。它適用於編寫選擇性較大的程序或程序包,以便根據用戶的需要和設備的配置情況剪裁、編制適當的軟件。這種匯編語言通常要引入“條件轉移”、“轉移”等匯編指示,以便根據用戶指定的匯編條件有選擇地匯編某些程序段或控制匯編程序的加工路徑。

  宏匯編程序 主要特點是在匯編程序中增加宏加工功能。它允許用戶方便地定義和使用宏指令,適用於程序中多處出現、具有一定格式、可以通過少數參數調節改變的程序段落的場合。采用這種方法不僅減少程序的長度,增加可讀性,而且程序段落的格式需要改變時,隻須改動定義處,而不必改動每一使用處。

  高級匯編程序 采用高級程序設計語言的控制語句結構的匯編程序。它不僅保持匯編語言表達能力強、程序運行效率高的優點,而且能充分吸收高級語言書寫簡單和易讀的長處。這是由於高級匯編程序允許用戶使用高級程序設計語言的控制語句(如條件語句、循環語句、函數和過程)編寫程序中的控制部分,而且還允許用戶直接利用匯編語言直接控制存儲分配、存取寄存器硬件,描述高級語言難於表達的算法。第一個高級匯編程序是N.沃思為IBM360系統研制的PL/360語言匯編程序,其特點是程序的控制部分采用高級語言的控制語句編寫,而數據加工部分采用IBM360匯編指令編寫。自此以後,又相繼出現瞭類似ALGOL的匯編程序,類似FORTRAN的匯編程序FAT。

  結構與實現 由於匯編語言的指令與機器語言的指令大體上保持一一對應的關系,匯編算法采用的基本策略是簡單的。通常采用兩遍掃描源程序的算法。第一遍掃描源程序根據符號的定義和使用,收集符號的有關信息到符號表中;第二遍利用第一遍收集的符號信息,將源程序中的符號化指令逐條翻譯為相應的機器指令。具體的翻譯工作可歸納為如下幾項:①用機器操作碼代替符號操作;②用數值地址代替符號地址;③將常數翻譯為機器的內部表示;④分配指令和數據所需的存儲單元。除瞭上述的翻譯工作外,匯編程序還要考慮:①處理偽指令,收集程序中提供的匯編指示信息,並執行相應的功能。②為用戶提供信息和源程序清單。③匯編的善後處理工作,隨目標語言的類型不同而有所不同。有的直接啟動執行,有的先進行連接裝配。④如果具有條件匯編、宏匯編或高級匯編功能時,也應進行相應的翻譯處理。

  假定匯編語言中規定符號的應用一定出現在定義之後,則兩遍算法可容易地合並成一遍算法加以實現。

  匯編程序的工作過程是:①輸入匯編語言源程序。②檢查語法的正確性,如果正確,則將源程序翻譯成等價的二進制或浮動二進制的機器語言程序,並根據用戶的需要輸出源程序和目標程序的對照清單;如果語法有錯,則輸出錯誤信息,指明錯誤的部位、類型和編號。③最後,對已匯編出的目標程序進行善後處理。

  

參考書目

 D. W. Barron, Assemblers and Loaders,American-Elsevier,New York,1972.