組合語言簡介處理器BIOS啟動程式微軟組譯器組合語言DOSWindowsVisualStudioGNUGNU 組譯器C 轉組語連結 C 語言嵌入 C 語言訊息相關網站參考文獻最新修改簡體版English |
IBM PC個人電腦 (以下簡PC) 目前使用的是IA32 的處理器,其啟動程式燒錄在 BIOS 當中。當PC啟動時,會進入 BIOS的啟動程式中,BIOS會進行『系統組態的分析』(System Configuration Analysis),以分析CPU型號、記憶體大小、軟、硬碟機的數量與型式、是否安裝浮點運算器等,做為其它動作的重要參考資料。接著進行『開機自我測試』(POST,Power-On Self Test),以測試記憶體、晶片組、CMOS儲存資料、鍵盤和磁碟機等硬體,若有錯則以訊息告知所在。 接著,會載入作業系統,像是 MS.MS DOS, MS.MS Windows, Linux 等。 另外,BIOS當中燒錄有中斷向量與中斷程式,因此、許多的輸出入動作都可以透過呼叫BIOS完成,不需要程式設計人員再撰寫輸出入程式。這對系統的開發人員而言,是較為方便的,但是對學習IA32組合語言的人而言,往往會將BIOS視為一組神奇的函數,反而無法理解輸出入的原理。 PC的BIOS模組,是由中斷向量 (0x000-0x400)、中斷資料區 (0x400-0x470) 與中斷處理函數所形成的,因此,使用像int $0x10 這樣的指令,就可以呼叫第 10 號中斷,在螢幕上輸出字串。這樣的指令其實是讓程式透過中斷向量,跳入中斷處理函數中,真正的輸出入反而是在中斷處理函數中做完了。 BIOS的資料區包含了輸出入的資訊,舉例而言,位移0x1E-0x3D之處存放了鍵盤緩衝區 (Keyboard typeahead buffer),其中存放有一連串的鍵盤掃描碼,等待16號中斷 (int 16h) 進行處理。表格 1 顯示了PC的BIOS資料區中,各記憶體位址所包含的資料。 表格 1. 個人電腦的BIOS資料區
PC每個BIOS中斷都有特殊的功能,例如10號中斷是控制螢幕的函數、16號中斷可控制鍵盤、17號中斷可控制印表機、1A中斷可取得計時器、1C中斷則是一個每秒會被執行18.2次的時間中斷函數,重新設定該中斷可讓程式乘是每隔1/18.2秒就執行一次。這些中斷,其實就是一組預先燒錄於BIOS中,可以透過中斷程序呼叫的『裝置驅動程式』。表格 2 顯示了PC的中斷表,這些中斷在撰寫 PC 組合語言時,具有重要的功能,因為PC組合語言可透過這些中斷存取周邊裝置,而不是讓程式設計師直接透過記憶體映射的方式存取周邊裝置。 表格 2:個人電腦PC的中斷表
舉例而言,由於 0x10 號中斷為螢幕的視訊服務,該服務可以用來設定游標位置,將螢幕上下捲動,顯示字元與字串等。因此、組合語言可以透過 int 10h在螢幕上顯示訊息。表格 3 顯示了BIOS第10號中斷的功能與參數設置表。 表格 3. BIOS第10號中斷 – 螢幕銀幕控制的詳細功能
那麼,要如何利用組合語言呼叫 int 中斷呢?範例 1 展示了一個利用BIOS中10號中斷以輸出 “Hello!” 字串的程式片段,該程式在設定了許多參數屬性後,利用int $0x10 指令呼叫BIOS,然後就會在銀幕上顯示是一個黑底紅字的 Hello! 字串。 範例 1. 利用PC BIOS的10號中斷,輸出Hello!的範例 (AT&T語法)
|
BIOS 與組合語言 (IBM PC)
page revision: 6, last edited: 11 Oct 2010 07:05
Post preview:
Close preview