摘要:設計的匯編語言子程序庫可以被匯編程序或C++程序調用。實現不同數制的鍵盤輸入和控制臺顯示。
關鍵詞:匯編語言 I/O 子程序 庫
中圖分類號:TP313 文獻標識碼:B 文章編號:1002-2422(2008)03-0086-02
設計的I/O子程序庫包括16位版本和32位版本,可分別應用于16位和32位匯編語言應用程序,提供的子程序功能包括不同數制和字符串的輸入與顯示,狀態標志的顯示,滿足匯編語言程序設計的通常要求。
1 設計方案
1.1子程序功能需求
根據在匯編語言程序設計中的通常要求,子程序所提供的功能主要包括鍵盤輸入和顯示器顯示,輸入和顯示的內容可以是不同的數制與字符串格式。如表1所示。


1.2子程序庫結構
為了方便整個子程序庫的設計,設計了一些通用予程序。在實現提供給用戶使用的子程序時,充分利用這些通用子程序,簡化了子程序的代碼編寫,減少了子程序庫的長度。主要子程序之間的關系如圖1所示。
字符輸入和顯示子程序READC、DISPC是整個子程序庫輸入輸出的基礎。利用這兩個子程序實現了字符串輸入和顯示子程序READMSG和DISPMSG。子程序READMSG和DISPMSG又是不同數制數據輸入和顯示的基礎:通過調用READMSG讀入字符串,然后調用字符串轉換子程序STRTOBIN、STRTOHEX、STRTOUI和STRTOSl分別將字符串轉換為不同數制的數據,從而實現了不同數制輸入的子程序READBIN、READHEX、READUI、READSI等;通過調用DISPMSG顯示字符串,然后調用數據轉換字符串子程序BINTOSTR、HEXTOSTR、UITOSTR和SITOSTR分別將字符串轉換為不同數制的數據,從而實現了顯示不同數制的子程序DISPBIN、DISPHEX、DISPUI、DISPSI等。
設計的16位和32位的子程序庫提供的子程序功能都是相同的,區別在于16位的字符輸入子程序是利用DOS系統調用實現的,而32位的字符輸入子程序是利用WIN-DOWS API函數實現的。其他子程序則可以通用。
各個子程序匯編后,由庫管理工具LIB.EXE生成16位子程序庫I/O16.LIB和32位子程序庫I/O32.LIB。
1.3參數傳遞
匯編語言子程序的參數傳遞可以采用寄存器傳遞,共享內存變量和堆棧傳遞三種方法。堆棧傳遞參數時,可以用MASM提供的偽指令PROTO來聲明子程序,用INVOKE來調用子程序。這兩個偽指令在聲明和調用子程序時相對于CALL指令和PROC偽指令要簡潔得多。使用堆棧傳遞參數也是高級語言通常使用的子程序傳遞參數的方法,用堆棧傳遞參數的子程序可以被高級語言調用。子程序的返回參數也遵循高級語言子程序的規范,采用寄存器EAX返回子程序的出口參數。
1.4宏命令
調用子程序需要用專門的調用指令并遵循一定的格式要求,這對于初學者來說有一定的難度。當子程序的參數比較多時,調用子程序的編碼量較多,設計了調用子程序的宏指令,利用宏指令來實現對應的子程序調用,格式簡單,使用方便,尤其適合初學者應用。為提高代碼的復用性,被調用子程序的聲明和宏定義都放在包含文件IO.INC中,在匯編語言應用程序中用INCLUDE語句包含該文件即可。
2 結束語
為了驗證子程序的正確性,分別設計了測試源程序I/O16TEST.ASM和I/O32TEST.ASM用于測試I/O子程序庫16位版本和32位版本的正確性。