匯編語言是一種低層次的編程語言,一臺電腦,或其他具體到一個特定的計算機架構(gòu)中最高級編程語言,這是一般便攜式跨多個系統(tǒng)的可編程器件。匯編語言轉(zhuǎn)換成可執(zhí)行的機器代碼的一個實用程序稱為像NASM匯編MASM等
Assembly language(匯編語言)是一種用于電子計算機、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。在匯編語言中,用助記符(Mnemonics)代替機器指令的操作碼,用地址符號(Symbol)或標號(Label)代替指令或操作數(shù)的地址。在不同的設(shè)備中,匯編語言對應(yīng)著不同的機器語言指令集,通過匯編過程轉(zhuǎn)換成機器指令。普遍地說,特定的匯編語言和特定的機器語言指令集是一一對應(yīng)的,不同平臺之間不可直接移植。
許多匯編程序為程序開發(fā)、匯編控制、輔助調(diào)試提供了額外的支持機制。有的匯編語言編程工具經(jīng)常會提供宏,它們也被稱為宏匯編器。匯編語言不像其他大多數(shù)的程序設(shè)計語言一樣被廣泛用于程序設(shè)計。在今天的實際應(yīng)用中,它通常被應(yīng)用在底層,硬件操作和高要求的程序優(yōu)化的場合。驅(qū)動程序、嵌入式操作系統(tǒng)和實時運行程序都需要匯編語言。
①說明程序是如何與操作系統(tǒng)、處理器和BIOS接口的;
②說明數(shù)據(jù)是如何表示并存儲在存儲器與外部設(shè)備上的;
③闡述處理器是如何訪問與執(zhí)行指令的,以及指令是如何訪問與處理數(shù)據(jù)的;
④闡述程序是如何訪問外部設(shè)備的。
使用匯編語言的理由是:
能夠直接訪問與硬件相關(guān)的存儲器或I/O端口;
能夠不受編譯器的限制,對生成的二進制代碼進行完全的控制;
能夠?qū)﹃P(guān)鍵代碼進行更準確的控制,避免因線程共同訪問或者硬件設(shè)備共享引起的死鎖;
能夠根據(jù)特定的應(yīng)用對代碼做最佳的優(yōu)化,提高運行速度;
能夠最大限度地發(fā)揮硬件的功能;
用匯編語言編寫的程序比用高級語言編寫的程序所要求的存儲空間與執(zhí)行時間將顯著減少;
匯編語言使程序員可以完成技術(shù)性非常強的任務(wù),而使用高級語言,即使可能做到,恐怕也會非常困難;
雖然大多數(shù)軟件專家是用高級語言開發(fā)新的應(yīng)用軟件的(那樣做,程序會比較容易編寫的維護),但是對于執(zhí)行時間要求比較苛刻的部分,常常還要用匯編語言來重新編寫;
常駐程序(當其他程序運行的時候,常駐在存儲器中的程序)和中斷服務(wù)例行程序(處理輸入與輸出的程序)幾乎都是用匯編語言開發(fā)的。
雖然匯編語言有諸多的優(yōu)點,同時還應(yīng)該認識到,匯編語言是一種層次非常低的語言,它僅僅高于直接手工編寫二進制的機器指令碼,因此不可避免地存在一些缺點:
編寫的代碼非常難懂,不好維護; 很容易產(chǎn)生Bug,難于調(diào)試; 只能針對特定的體系結(jié)構(gòu)和處理器進行優(yōu)化; 開發(fā)效率很低,時間長且單調(diào)。
早期的程序設(shè)計均使用機器語言。程序員們將用0, 1數(shù)字編成的程序代碼打在紙帶或卡片上,1打孔,0不打孔,再將程序通過紙帶機或卡片機輸入計算機,進行運算。這樣的機器語言由純粹的0和1構(gòu)成,十分復(fù)雜,不方便閱讀和修改,也容易產(chǎn)生錯誤。程序員們很快就發(fā)現(xiàn)了使用機器語言帶來的麻煩,它們難于辨別和記憶,給整個產(chǎn)業(yè)的發(fā)展帶來了障礙,于是匯編語言產(chǎn)生了。
匯編語言的主體是匯編指令。匯編指令和機器指令的差別在于指令的表示方法上。匯編指令是機器指令便于記憶的書寫格式。
操作:寄存器BX的內(nèi)容送到AX中
1000100111011000 機器指令
mov ax,bx 匯編指令
此后,程序員們就用匯編指令編寫源程序。可是,計算機能讀懂的只有機器指令,那么如何讓計算機執(zhí)行程序員用匯編指令編寫的程序呢?這時,就需要有一個能夠?qū)R編指令轉(zhuǎn)換成機器指令的翻譯程序,這樣的程序我們稱其為編譯器。程序員用匯編語言寫出源程序,再用匯編編譯器將其編譯為機器碼,由計算機最終執(zhí)行。
21世紀以來,學習匯編的人雖然也不少,但是真正能學到精通的卻不多,它相對于高級語言難學,難用,適用范圍小,雖然簡單,但是過于靈活,學習過高級語言的人去學習匯編比一開始學匯編的人難得多,但是學過匯編的人學習高級語言卻很容易,簡從繁易,繁從簡難。對于一個全面了解微機原理的程序員,匯編語言是必修語言。
在您開始學習 Assembly Language 之前,您應(yīng)該對以下知識有基本的了解:
w3cschool《C語言教程》
本地環(huán)境設(shè)置:
匯編語言是依賴于指令集和架構(gòu)的處理器。在本教程中,我們使用英特爾32處理器,如奔騰。按照本教程中將需要:
1、一臺IBM PC兼容電腦或任何同等
2、Linux操作系統(tǒng)副本
3、NASM匯編程序的副本
有很多很好的匯編程序,如:
1、微軟匯編(MASM)
2、Borland公司的Turbo匯編(TASM)
3、GNU匯編器(GAS)
我們將使用NASM匯編,因為它是:
1、免費。可以從網(wǎng)絡(luò)下載。有據(jù)可查的,會得到大量網(wǎng)上的信息。
2、可以用在Linux和Windows
3、安裝NASM
如果選擇“開發(fā)工具”,而安裝Linux,可以隨著Linux操作系統(tǒng)安裝NASM,不需要單獨下載并安裝。
檢查是否已經(jīng)安裝了NASM,采取以下步驟:
1、打開一個Linux終端。
2、輸入whereis NASM,然后按ENTER鍵。
如果已經(jīng)安裝,則類似這樣一行,nasm: /usr/bin/nasm將出現(xiàn)。否則將看到的只是NASM,那么需要安裝NASM。
要安裝NASM采取以下步驟:
1、詳細訪問NASM官網(wǎng)The netwide assembler (NASM) 查看最新版本。
2、下載Linux源歸檔文件nasm-X.XX. ta .gz。GZ,其中X.XX為NASM版本號到存檔。
3、解壓縮到一個目錄,創(chuàng)建一個子目錄 nasm-X. XX.
4、進入目錄 nasm-X. XX 然后輸入 ./configure . 此shell腳本將找到最好的C編譯器的使用和設(shè)置相應(yīng)的Makefile。
5、輸入 make 來建立NASM和ndisasm的二進制文件。
6、輸入make install NASM和ndisasm安裝在/usr/local/bin目錄和安裝手冊頁。
這應(yīng)該在系統(tǒng)上安裝NASM。另外在Linux系統(tǒng)中可以使用RPM分發(fā)。這個版本是簡單安裝,只需雙擊該RPM文件。
本教程共由20個章節(jié)構(gòu)成,詳細講述了Assembly Language的基礎(chǔ)使用方法:
本教程包含:
1、Assembly 基礎(chǔ)介紹
2、Assembly 基本匯編語言
3、Assembly 位操作
4、Assembly 子程序
5、Assembly 數(shù)組
6、Assembly 浮點
7、結(jié)構(gòu)體與C++
8、80X86指令