匯(hui)(hui)(hui)編語(yu)言(yan)(yan)(Assembly Language)是(shi)(shi)任何一種用于電子計算機、微處理器(qi)(qi)、微控(kong)制器(qi)(qi)或(huo)其他可編程器(qi)(qi)件的(de)(de)低級語(yu)言(yan)(yan),亦稱為符(fu)號(hao)(hao)語(yu)言(yan)(yan)。在匯(hui)(hui)(hui)編語(yu)言(yan)(yan)中(zhong),用助記符(fu)代替機器(qi)(qi)指(zhi)令的(de)(de)操作碼,用地址符(fu)號(hao)(hao)或(huo)標號(hao)(hao)代替指(zhi)令或(huo)操作數的(de)(de)地址。在不(bu)同的(de)(de)設備中(zhong),匯(hui)(hui)(hui)編語(yu)言(yan)(yan)對應著(zhu)不(bu)同的(de)(de)機器(qi)(qi)語(yu)言(yan)(yan)指(zhi)令集(ji),通(tong)過匯(hui)(hui)(hui)編過程轉換成機器(qi)(qi)指(zhi)令。特(te)定的(de)(de)匯(hui)(hui)(hui)編語(yu)言(yan)(yan)和特(te)定的(de)(de)機器(qi)(qi)語(yu)言(yan)(yan)指(zhi)令集(ji)是(shi)(shi)一一對應的(de)(de),不(bu)同平臺之間不(bu)可直接移植(zhi)。
匯編(bian)語(yu)言,即第二代(dai)(dai)計算(suan)(suan)機語(yu)言,用(yong)(yong)(yong)一些容易理(li)解(jie)和(he)(he)記憶(yi)的(de)(de)(de)(de)縮寫單(dan)詞來代(dai)(dai)替一些特(te)(te)定的(de)(de)(de)(de)指令(ling),例如:用(yong)(yong)(yong)"ADD"代(dai)(dai)表(biao)加(jia)(jia)法操作(zuo)(zuo)指令(ling),"SUB"代(dai)(dai)表(biao)減(jian)法操作(zuo)(zuo)指令(ling),以及"INC"代(dai)(dai)表(biao)增(zeng)加(jia)(jia)1,"DEC"代(dai)(dai)表(biao)減(jian)去(qu)1,"MOV"代(dai)(dai)表(biao)變(bian)量(liang)傳(chuan)遞(di)等等,通過這種方法,人(ren)們很(hen)容易去(qu)閱讀(du)已經完成(cheng)的(de)(de)(de)(de)程(cheng)(cheng)(cheng)序(xu)(xu)或者理(li)解(jie)程(cheng)(cheng)(cheng)序(xu)(xu)正在(zai)執(zhi)行(xing)的(de)(de)(de)(de)功(gong)能,對現(xian)有程(cheng)(cheng)(cheng)序(xu)(xu)的(de)(de)(de)(de)bug修復以及運營維護都(dou)變(bian)得(de)更加(jia)(jia)簡單(dan)方便。但(dan)計算(suan)(suan)機的(de)(de)(de)(de)硬(ying)件不(bu)認識(shi)字母符(fu)號,這時候就需(xu)要一個專(zhuan)門的(de)(de)(de)(de)程(cheng)(cheng)(cheng)序(xu)(xu)把這些字符(fu)變(bian)成(cheng)計算(suan)(suan)機能夠識(shi)別的(de)(de)(de)(de)二進(jin)制數(shu)或機器(qi)語(yu)言。因為匯編(bian)語(yu)言只是(shi)將機器(qi)語(yu)言做(zuo)了簡單(dan)編(bian)譯,所以并沒有根(gen)本上(shang)解(jie)決機器(qi)語(yu)言的(de)(de)(de)(de)特(te)(te)定性(xing)(xing),所以匯編(bian)語(yu)言和(he)(he)機器(qi)自身的(de)(de)(de)(de)編(bian)程(cheng)(cheng)(cheng)環境息(xi)息(xi)相關,推(tui)廣和(he)(he)移植很(hen)難,但(dan)是(shi)還是(shi)保(bao)持了機器(qi)語(yu)言優秀的(de)(de)(de)(de)執(zhi)行(xing)效率(lv),因為他的(de)(de)(de)(de)可閱讀(du)性(xing)(xing)和(he)(he)簡便性(xing)(xing),匯編(bian)語(yu)言到現(xian)在(zai)依然是(shi)常(chang)用(yong)(yong)(yong)的(de)(de)(de)(de)編(bian)程(cheng)(cheng)(cheng)語(yu)言之(zhi)一。匯編(bian)語(yu)言不(bu)像(xiang)其他大多數(shu)的(de)(de)(de)(de)程(cheng)(cheng)(cheng)序(xu)(xu)設(she)計語(yu)言一樣被廣泛用(yong)(yong)(yong)于(yu)程(cheng)(cheng)(cheng)序(xu)(xu)設(she)計。在(zai)今天(tian)的(de)(de)(de)(de)實(shi)(shi)際應(ying)用(yong)(yong)(yong)中,它通常(chang)被應(ying)用(yong)(yong)(yong)在(zai)底層,硬(ying)件操作(zuo)(zuo)和(he)(he)高(gao)要求(qiu)的(de)(de)(de)(de)程(cheng)(cheng)(cheng)序(xu)(xu)優化的(de)(de)(de)(de)場合。驅動程(cheng)(cheng)(cheng)序(xu)(xu)、嵌入式操作(zuo)(zuo)系統(tong)和(he)(he)實(shi)(shi)時運行(xing)程(cheng)(cheng)(cheng)序(xu)(xu)都(dou)需(xu)要匯編(bian)語(yu)言。
自從1946年世(shi)(shi)界(jie)上第一臺電子計算機(ji)(ji)(ji)問世(shi)(shi),人(ren)類和機(ji)(ji)(ji)器的(de)交流方式和語(yu)(yu)言(yan)(yan)(yan)就(jiu)成(cheng)為了(le)軟件(jian)工程(cheng)(cheng)師(shi)和計算機(ji)(ji)(ji)從業者的(de)主要(yao)研究(jiu)方向(xiang),更有效更簡便的(de)編(bian)程(cheng)(cheng)語(yu)(yu)言(yan)(yan)(yan)成(cheng)為了(le)軟件(jian)工程(cheng)(cheng)師(shi)的(de)新寵兒,伴隨著計算機(ji)(ji)(ji)的(de)飛速發展,計算機(ji)(ji)(ji)的(de)硬件(jian)升級速度也越來(lai)越快,對編(bian)程(cheng)(cheng)語(yu)(yu)言(yan)(yan)(yan)的(de)要(yao)求也日益嚴格。在過去的(de)幾十(shi)年,編(bian)程(cheng)(cheng)語(yu)(yu)言(yan)(yan)(yan)有了(le)長(chang)足的(de)發展,至今(jin)已經(jing)有四代(dai)語(yu)(yu)言(yan)(yan)(yan)問世(shi)(shi)。大(da)量的(de)編(bian)程(cheng)(cheng)語(yu)(yu)言(yan)(yan)(yan)為了(le)滿足不(bu)同領域的(de)編(bian)程(cheng)(cheng)要(yao)求和軟件(jian)功能,經(jing)歷了(le)被(bei)修(xiu)改,被(bei)取代(dai),被(bei)發展等(deng)過程(cheng)(cheng),最終(zhong)發展成(cheng)了(le)現(xian)在編(bian)程(cheng)(cheng)語(yu)(yu)言(yan)(yan)(yan)的(de)多樣化(hua)。盡(jin)管人(ren)們多次試圖尋找一個能夠(gou)適應所(suo)有編(bian)程(cheng)(cheng)環境的(de)通用(yong)語(yu)(yu)言(yan)(yan)(yan),但是卻沒有一次成(cheng)功。程(cheng)(cheng)序設計語(yu)(yu)言(yan)(yan)(yan)正在與現(xian)代(dai)科技日益飛躍,人(ren)類的(de)智(zhi)慧在日益彰顯。
計(ji)算機(ji)(ji)(ji)的(de)(de)(de)硬(ying)件作為(wei)(wei)一種電路(lu)元(yuan)件,它的(de)(de)(de)輸出和輸入只(zhi)(zhi)能(neng)是有(you)電或者(zhe)沒(mei)電,也就(jiu)(jiu)是所(suo)(suo)(suo)說的(de)(de)(de)高電平(ping)和低電平(ping),所(suo)(suo)(suo)以(yi)計(ji)算機(ji)(ji)(ji)傳遞的(de)(de)(de)數(shu)據是由(you)(you)“0”和“1”組成(cheng)的(de)(de)(de)二進制(zhi)(zhi)(zhi)(zhi)數(shu),所(suo)(suo)(suo)以(yi)說二進制(zhi)(zhi)(zhi)(zhi)的(de)(de)(de)語(yu)(yu)言(yan)是計(ji)算機(ji)(ji)(ji)語(yu)(yu)言(yan)的(de)(de)(de)本(ben)質。計(ji)算機(ji)(ji)(ji)發明之初,人們為(wei)(wei)了(le)(le)去控制(zhi)(zhi)(zhi)(zhi)計(ji)算機(ji)(ji)(ji)完成(cheng)自(zi)己的(de)(de)(de)任務或者(zhe)項目(mu),只(zhi)(zhi)能(neng)去編(bian)(bian)寫“0”、“1”這(zhe)樣的(de)(de)(de)二進制(zhi)(zhi)(zhi)(zhi)數(shu)字串(chuan)去控制(zhi)(zhi)(zhi)(zhi)電腦(nao),其實就(jiu)(jiu)是控制(zhi)(zhi)(zhi)(zhi)計(ji)算機(ji)(ji)(ji)硬(ying)件的(de)(de)(de)高低電平(ping)或通路(lu)開(kai)路(lu),這(zhe)種語(yu)(yu)言(yan)就(jiu)(jiu)是機(ji)(ji)(ji)器(qi)語(yu)(yu)言(yan)。直觀上看,機(ji)(ji)(ji)器(qi)語(yu)(yu)言(yan)十分晦澀(se)難(nan)懂,其中的(de)(de)(de)含義往往要(yao)通過(guo)查(cha)表(biao)或者(zhe)手(shou)冊才能(neng)理(li)解,使用的(de)(de)(de)時候非常痛苦,尤其當你需(xu)要(yao)修改已經完成(cheng)的(de)(de)(de)程序(xu)(xu)(xu)時,這(zhe)種看起來(lai)無(wu)序(xu)(xu)(xu)的(de)(de)(de)機(ji)(ji)(ji)器(qi)語(yu)(yu)言(yan)會(hui)讓你無(wu)從下手(shou),也很難(nan)找(zhao)到程序(xu)(xu)(xu)的(de)(de)(de)錯誤。而(er)且(qie),不同(tong)計(ji)算機(ji)(ji)(ji)的(de)(de)(de)運(yun)行(xing)環境不同(tong),指令方式操作方式也不盡相同(tong),所(suo)(suo)(suo)以(yi)當你在(zai)這(zhe)種機(ji)(ji)(ji)器(qi)語(yu)(yu)言(yan)就(jiu)(jiu)有(you)了(le)(le)特定(ding)性,只(zhi)(zhi)能(neng)在(zai)特定(ding)的(de)(de)(de)計(ji)算機(ji)(ji)(ji)上執行(xing),而(er)一旦換了(le)(le)機(ji)(ji)(ji)器(qi)就(jiu)(jiu)需(xu)要(yao)重新(xin)編(bian)(bian)程,這(zhe)極大的(de)(de)(de)降低了(le)(le)程序(xu)(xu)(xu)的(de)(de)(de)使用和推廣效率。但由(you)(you)于(yu)機(ji)(ji)(ji)器(qi)語(yu)(yu)言(yan)具有(you)特定(ding)性,完美(mei)適配特定(ding)型號的(de)(de)(de)計(ji)算機(ji)(ji)(ji),故而(er)運(yun)行(xing)效率遠(yuan)遠(yuan)高過(guo)其他語(yu)(yu)言(yan)。機(ji)(ji)(ji)器(qi)語(yu)(yu)言(yan),也就(jiu)(jiu)是第一代編(bian)(bian)程語(yu)(yu)言(yan)。
不(bu)難看(kan)出機器語(yu)言(yan)(yan)(yan)作為(wei)一種編程語(yu)言(yan)(yan)(yan),靈活性較(jiao)差(cha)可閱讀性也很差(cha),為(wei)了減(jian)輕機器語(yu)言(yan)(yan)(yan)帶給軟件工(gong)程師的(de)不(bu)適應,人們(men)對機器語(yu)言(yan)(yan)(yan)進(jin)行了升(sheng)級和改進(jin):用一些容易理解(jie)和記憶的(de)字母(mu),單(dan)詞來代替(ti)一個特定的(de)指令(ling)。通過這種方法,人們(men)很容易去閱讀已(yi)經完成的(de)程序(xu)或者理解(jie)程序(xu)正在執行的(de)功能,對現有程序(xu)的(de)bug修復以及運營維護都變得更加簡單(dan)方便,這種語(yu)言(yan)(yan)(yan)就是我們(men)所說的(de)匯編語(yu)言(yan)(yan)(yan),即(ji)第二(er)代計算機語(yu)言(yan)(yan)(yan)。
比起機器(qi)(qi)語言(yan)(yan)(yan),匯編(bian)語言(yan)(yan)(yan)具有更高(gao)的機器(qi)(qi)相關性,更加便(bian)于記憶和書寫(xie),但又(you)同時保留了(le)機器(qi)(qi)語言(yan)(yan)(yan)高(gao)速(su)度(du)(du)和高(gao)效率的特點。匯編(bian)語言(yan)(yan)(yan)仍是面向(xiang)機器(qi)(qi)的語言(yan)(yan)(yan),很難從其代碼上理(li)解程序設計(ji)意圖,設計(ji)出(chu)來的程序不易被移植,故不像其他大多數的高(gao)級計(ji)算機語言(yan)(yan)(yan)一樣被廣泛應用。所以在高(gao)級語言(yan)(yan)(yan)高(gao)度(du)(du)發展的今天,它通常被用在底層,通常是程序優化或硬件操作的場合。
在(zai)編(bian)(bian)程(cheng)(cheng)語(yu)言(yan)經歷(li)了(le)機(ji)器(qi)語(yu)言(yan),匯(hui)編(bian)(bian)語(yu)言(yan)等(deng)更新之后(hou),人(ren)們發現(xian)了(le)限制程(cheng)(cheng)序(xu)推廣的(de)(de)(de)關鍵因素(su)——程(cheng)(cheng)序(xu)的(de)(de)(de)可(ke)移植性。需要(yao)設(she)計(ji)(ji)(ji)一(yi)個(ge)(ge)能夠不(bu)(bu)依(yi)賴(lai)于計(ji)(ji)(ji)算(suan)(suan)(suan)機(ji)硬(ying)件,能夠在(zai)不(bu)(bu)同(tong)機(ji)器(qi)上運(yun)行(xing)的(de)(de)(de)程(cheng)(cheng)序(xu)。這樣可(ke)以(yi)免去很多編(bian)(bian)程(cheng)(cheng)的(de)(de)(de)重復過程(cheng)(cheng),提高效率(lv),同(tong)時(shi)(shi)這種語(yu)言(yan)又要(yao)接近于數學語(yu)言(yan)或人(ren)的(de)(de)(de)自然(ran)語(yu)言(yan)。在(zai)計(ji)(ji)(ji)算(suan)(suan)(suan)機(ji)還很稀(xi)缺的(de)(de)(de)50年(nian)代,誕生了(le)第一(yi)個(ge)(ge)高級(ji)(ji)編(bian)(bian)程(cheng)(cheng)語(yu)言(yan)。當時(shi)(shi)計(ji)(ji)(ji)算(suan)(suan)(suan)機(ji)的(de)(de)(de)造價不(bu)(bu)菲(fei),但(dan)是每天的(de)(de)(de)計(ji)(ji)(ji)算(suan)(suan)(suan)量(liang)又有限,如何有效的(de)(de)(de)利用計(ji)(ji)(ji)算(suan)(suan)(suan)機(ji)有限的(de)(de)(de)計(ji)(ji)(ji)算(suan)(suan)(suan)能力成為(wei)了(le)當時(shi)(shi)人(ren)們面對(dui)的(de)(de)(de)問題。同(tong)時(shi)(shi),因為(wei)資源的(de)(de)(de)稀(xi)缺,計(ji)(ji)(ji)算(suan)(suan)(suan)機(ji)的(de)(de)(de)運(yun)行(xing)效率(lv)也(ye)成為(wei)了(le)那個(ge)(ge)年(nian)代工程(cheng)(cheng)師追(zhui)(zhui)尋的(de)(de)(de)目標。為(wei)了(le)更高效的(de)(de)(de)使用計(ji)(ji)(ji)算(suan)(suan)(suan)機(ji),人(ren)們設(she)計(ji)(ji)(ji)出了(le)高級(ji)(ji)編(bian)(bian)程(cheng)(cheng)語(yu)言(yan),來滿(man)足(zu)人(ren)們對(dui)于高效簡潔的(de)(de)(de)編(bian)(bian)程(cheng)(cheng)語(yu)言(yan)的(de)(de)(de)追(zhui)(zhui)求。
由(you)于匯(hui)編(bian)指(zhi)令(ling)(ling)(ling)系統(tong)龐大(da),因而需構建指(zhi)令(ling)(ling)(ling)系統(tong)體系,其(qi)指(zhi)令(ling)(ling)(ling)數量龐大(da),格式(shi)(shi)(shi)復(fu)雜,可記憶性差等。指(zhi)令(ling)(ling)(ling)中最難的(de)是(shi)指(zhi)令(ling)(ling)(ling)所(suo)支持的(de)尋址方式(shi)(shi)(shi),其(qi)實質(zhi)就是(shi)指(zhi)令(ling)(ling)(ling)中操作(zuo)數如何(he)獲取。對(dui)于處理(li)器(qi)而言,就是(shi)如何(he)找(zhao)到(dao)他所(suo)需的(de)數據(ju)。但對(dui)于計(ji)算機(ji)底(di)層(ceng)的(de)匯(hui)編(bian)語言而言,這種(zhong)尋址方式(shi)(shi)(shi)將涉及(ji)大(da)量的(de)計(ji)算存儲格式(shi)(shi)(shi),與(yu)復(fu)雜的(de)存儲管理(li)方式(shi)(shi)(shi)緊密相關,因而難以理(li)解。最后(hou),匯(hui)編(bian)指(zhi)令(ling)(ling)(ling)還關系到(dao)如何(he)影響標志位(wei),但處理(li)器(qi)標志位(wei)非常復(fu)雜,因而對(dui)其(qi)機(ji)制掌握就比較困難。
包括通(tong)用數據(ju)傳(chuan)送指(zhi)令(ling)(ling)MOV、條件傳(chuan)送指(zhi)令(ling)(ling)CMOVcc、堆棧操作(zuo)指(zhi)令(ling)(ling)PUSH/PUSHA/PUSHAD/POP/POPA/POPAD、交換指(zhi)令(ling)(ling)XCHG/XLAT/BSWAP、地址或段描(miao)述符選(xuan)擇子傳(chuan)送指(zhi)令(ling)(ling)LEA/LDS/LES/LFS/LGS/LSS等。
這部分指(zhi)令(ling)(ling)(ling)用于執行算術(shu)和邏輯運(yun)(yun)算,包括加(jia)法(fa)指(zhi)令(ling)(ling)(ling)ADD/ADC、減(jian)(jian)法(fa)指(zhi)令(ling)(ling)(ling)SUB/SBB、加(jia)一指(zhi)令(ling)(ling)(ling)INC、減(jian)(jian)一指(zhi)令(ling)(ling)(ling)DEC、比較操作指(zhi)令(ling)(ling)(ling)CMP、乘法(fa)指(zhi)令(ling)(ling)(ling)MUL/IMUL、除法(fa)指(zhi)令(ling)(ling)(ling)DIV/IDIV、符號擴展指(zhi)令(ling)(ling)(ling)CBW/CWDE/CDQE、十(shi)進制調整(zheng)指(zhi)令(ling)(ling)(ling)DAA/DAS/AAA/AAS、邏輯運(yun)(yun)算指(zhi)令(ling)(ling)(ling)NOT/AND/OR/XOR/TEST等(deng)。
這部分(fen)指(zhi)(zhi)令(ling)(ling)用于將寄存器或內存操作(zuo)數移動(dong)指(zhi)(zhi)定的次數。包括邏(luo)輯左移指(zhi)(zhi)令(ling)(ling)SHL、邏(luo)輯右移指(zhi)(zhi)令(ling)(ling)SHR、算(suan)術左移指(zhi)(zhi)令(ling)(ling)SAL、算(suan)術右移指(zhi)(zhi)令(ling)(ling)SAR、循環左移指(zhi)(zhi)令(ling)(ling)ROL、循環右移指(zhi)(zhi)令(ling)(ling)ROR等(deng)。
這(zhe)部分指(zhi)(zhi)令(ling)包括位(wei)測(ce)試指(zhi)(zhi)令(ling)BT、位(wei)測(ce)試并(bing)置位(wei)指(zhi)(zhi)令(ling)BTS、位(wei)測(ce)試并(bing)復位(wei)指(zhi)(zhi)令(ling)BTR、位(wei)測(ce)試并(bing)取反指(zhi)(zhi)令(ling)BTC、位(wei)向(xiang)前(qian)掃描指(zhi)(zhi)令(ling)BSF、位(wei)向(xiang)后(hou)掃描指(zhi)(zhi)令(ling)BSR等。
這部分包(bao)括無條件(jian)轉(zhuan)(zhuan)移(yi)指(zhi)令JMP、條件(jian)轉(zhuan)(zhuan)移(yi)指(zhi)令JCC/JCXZ、循(xun)環指(zhi)令LOOP/LOOPE/LOOPNE、過程調用指(zhi)令CALL、子過程返回指(zhi)令RET、中斷指(zhi)令INTn、INT3、INTO、IRET等。
這部分(fen)指(zhi)令用于(yu)對數(shu)據串(chuan)進(jin)行操作,包(bao)括串(chuan)傳送指(zhi)令MOVS、串(chuan)比較指(zhi)令CMPS、串(chuan)掃描指(zhi)令SCANS、串(chuan)加載指(zhi)令LODS、串(chuan)保(bao)存指(zhi)令STOS,這些指(zhi)令可以有選擇(ze)地使(shi)用REP/REPE/REPZ/REPNE和REPNZ的(de)前(qian)綴以連續操作。
這部分指(zhi)令(ling)(ling)用于同外圍設備交(jiao)換數據,包括端口輸入指(zhi)令(ling)(ling)IN/INS、端口輸出指(zhi)令(ling)(ling)OUT/OUTS。
匯編(bian)語(yu)言(yan)是計算(suan)機提供給(gei)用戶的(de)最(zui)快(kuai)最(zui)有(you)(you)效的(de)語(yu)言(yan),也(ye)是能夠(gou)利用計算(suan)機的(de)所(suo)有(you)(you)硬(ying)件特性并能夠(gou)直接控制硬(ying)件的(de)唯(wei)一語(yu)言(yan)。但是由于(yu)編(bian)寫(xie)和調(diao)試匯編(bian)語(yu)言(yan)程(cheng)序要比高級語(yu)言(yan)復雜,因(yin)此目前其應用不如高級語(yu)言(yan)廣泛。
匯(hui)編語言比機器語言的(de)可(ke)讀性要(yao)好,但跟高級(ji)(ji)語言比較而言,可(ke)讀性還是較差。不過采用(yong)它編寫的(de)程(cheng)序具(ju)有存儲空(kong)間(jian)占用(yong)少、執行速度快的(de)特點,這些是高級(ji)(ji)語言所無法取(qu)代的(de)。在實際應(ying)用(yong)中(zhong),是否使(shi)用(yong)匯(hui)編語言,取(qu)決于(yu)具(ju)體應(ying)用(yong)要(yao)求、開發時間(jian)和(he)質量等方面作權衡。
匯編語言(yan)作為機器(qi)語言(yan)之上(shang)的第二代編程(cheng)語言(yan),它(ta)也有很多優點:
可以(yi)輕(qing)松的讀取存儲器狀(zhuang)態以(yi)及硬件(jian)I/O接(jie)口情況
編(bian)寫的(de)(de)代碼因為少了很多(duo)編(bian)譯的(de)(de)環節(jie),可以能夠準確的(de)(de)被(bei)執行
作為(wei)一種低級語(yu)言,可(ke)擴展(zhan)性很(hen)高
因為代碼(ma)非常(chang)單調(diao),特殊指令字符(fu)很少,所以造(zao)成了代碼(ma)的冗長(chang)以及(ji)編(bian)寫的困難
因為匯編仍(reng)然需要自(zi)己(ji)去(qu)調用存儲(chu)(chu)器存儲(chu)(chu)數(shu)據,很容(rong)易出現BUG,而且調試起(qi)來也不容(rong)易
就算完成了一個程序,后(hou)期(qi)維護時候也需要耗費大量(liang)的時間。
因為機器的(de)特殊性(xing)(xing)造成了代碼兼容性(xing)(xing)差的(de)缺(que)陷。
匯(hui)編語言的特(te)點是(shi)容易被計算機識(shi)別和(he)執行(xing),使用它進行(xing)編程(cheng)可(ke)以(yi)減少占用空間、提(ti)高運(yun)行(xing)速(su)度(du),并能直(zhi)接對(dui)硬件實施控制。在(zai)需要實時控制的時候,有著(zhu)不可(ke)替代的重要地位,但匯(hui)編語言在(zai)編程(cheng)和(he)理解時要復雜、困難一些,尤其是(shi)在(zai)進行(xing)數據處理或是(shi)邏輯運(yun)算時更加凸(tu)顯出其劣勢(shi)。
高(gao)級語言是面向使用者的(de)(de)語言,能更準確地被程(cheng)序(xu)員所(suo)理解,它的(de)(de)表達能力強,功能多,編(bian)程(cheng)效(xiao)率高(gao),上(shang)手(shou)速度快(kuai),自動(dong)化程(cheng)度高(gao),因而更受歡迎。在(zai)(zai)大部分軟件開發中,使用者都采用高(gao)級語言編(bian)程(cheng),以(yi)提(ti)高(gao)編(bian)程(cheng)效(xiao)率。但在(zai)(zai)要求存儲空間小,執(zhi)行速度快(kuai),需直接(jie)對(dui)硬(ying)件進行控制(zhi)的(de)(de)場合,則(ze)應用匯編(bian)語言編(bian)程(cheng),以(yi)達到優化程(cheng)序(xu)速度的(de)(de)目的(de)(de)。
這(zhe)樣(yang)兩種(zhong)看似(si)差別很大的(de)(de)(de)語(yu)(yu)(yu)言(yan)(yan),它們(men)之(zhi)間又有(you)著緊(jin)密(mi)的(de)(de)(de)聯系(xi)。在一些程(cheng)(cheng)序設(she)計當中(zhong)(zhong),如果把兩者(zhe)結合(he)起來(lai)(lai)(lai)使(shi)用(yong)(yong),將兩種(zhong)語(yu)(yu)(yu)言(yan)(yan)的(de)(de)(de)優勢(shi)同時(shi)發揮(hui)(hui)出來(lai)(lai)(lai),則可(ke)(ke)(ke)以(yi)(yi)解決(jue)很多特性難(nan)題。在許多程(cheng)(cheng)序的(de)(de)(de)設(she)計當中(zhong)(zhong),高(gao)級(ji)語(yu)(yu)(yu)言(yan)(yan)和匯(hui)編(bian)語(yu)(yu)(yu)言(yan)(yan)可(ke)(ke)(ke)以(yi)(yi)相(xiang)互(hu)(hu)交叉調(diao)用(yong)(yong),進行(xing)參數傳遞(di),共享數據信息,這(zhe)便是所(suo)謂的(de)(de)(de)混(hun)合(he)編(bian)程(cheng)(cheng)。程(cheng)(cheng)序員往往在高(gao)級(ji)語(yu)(yu)(yu)言(yan)(yan)程(cheng)(cheng)序中(zhong)(zhong)直接嵌入匯(hui)編(bian)語(yu)(yu)(yu)句,以(yi)(yi)實(shi)現(xian)對(dui)硬件直接進行(xing)控制的(de)(de)(de)功能,這(zhe)是混(hun)合(he)編(bian)程(cheng)(cheng)中(zhong)(zhong)常(chang)見的(de)(de)(de)做(zuo)法。也可(ke)(ke)(ke)以(yi)(yi)在高(gao)級(ji)語(yu)(yu)(yu)言(yan)(yan)程(cheng)(cheng)序中(zhong)(zhong)使(shi)用(yong)(yong)匯(hui)編(bian)語(yu)(yu)(yu)言(yan)(yan)中(zhong)(zhong)定義(yi)的(de)(de)(de)變量和常(chang)量,或使(shi)用(yong)(yong)內部函數對(dui)匯(hui)編(bian)語(yu)(yu)(yu)句進行(xing)調(diao)用(yong)(yong)。簡而(er)言(yan)(yan)之(zhi),這(zhe)類混(hun)合(he)編(bian)程(cheng)(cheng)的(de)(de)(de)方(fang)法可(ke)(ke)(ke)以(yi)(yi)讓高(gao)級(ji)語(yu)(yu)(yu)言(yan)(yan)與匯(hui)編(bian)語(yu)(yu)(yu)言(yan)(yan)互(hu)(hu)相(xiang)取長補短,各(ge)自發揮(hui)(hui)各(ge)自優勢(shi),同時(shi)減少(shao)各(ge)自缺點(dian)所(suo)帶(dai)來(lai)(lai)(lai)的(de)(de)(de)不便,善用(yong)(yong)這(zhe)個方(fang)法可(ke)(ke)(ke)以(yi)(yi)使(shi)開發和編(bian)程(cheng)(cheng)工作達到(dao)事半功倍的(de)(de)(de)效果。
典型的(de)(de)現(xian)代匯編器(qi)(Assembler)建造目標代碼(ma)(ma),由(you)解譯組語(yu)指令集(ji)的(de)(de)易記碼(ma)(ma)(Mnemonics)到(dao)操作(zuo)碼(ma)(ma)(OpCode),并解析符(fu)號(hao)名(ming)稱(cheng)(Symbolic Names)成為(wei)存儲器(qi)地址以及其(qi)它的(de)(de)實體。使(shi)用符(fu)號(hao)參考(kao)是匯編器(qi)的(de)(de)一(yi)個(ge)重要特征,它可(ke)以節省修改程序后人工轉(zhuan)址的(de)(de)乏味耗時(shi)計算。基本(ben)就是把(ba)機器(qi)碼(ma)(ma)變成一(yi)些字母而(er)已(yi),編譯的(de)(de)時(shi)候再把(ba)輸入的(de)(de)指令字母替換(huan)成為(wei)晦(hui)澀(se)難懂(dong)機器(qi)碼(ma)(ma)。
用匯編(bian)語言(yan)等非機(ji)器語言(yan)書寫(xie)好(hao)的(de)符號(hao)程序稱為(wei)源程序,匯編(bian)語言(yan)編(bian)譯(yi)器的(de)作(zuo)用是將源程序翻譯(yi)成(cheng)目標(biao)程序。目標(biao)程序是機(ji)器語言(yan)程序,當它(ta)被安置(zhi)在內(nei)存的(de)預定位置(zhi)上后(hou),就能被計算機(ji)的(de)CPU處理和執行。
匯編(bian)的(de)調試環境總的(de)來(lai)(lai)說(shuo)比較少(shao),也很少(shao)有非常好的(de)編(bian)譯器(qi)。編(bian)譯器(qi)的(de)選擇(ze)依賴于目標處理(li)(li)器(qi)的(de)類型和(he)具體的(de)系統(tong)平臺。一般(ban)來(lai)(lai)說(shuo),功能良(liang)好的(de)編(bian)譯器(qi)用(yong)起(qi)來(lai)(lai)應當(dang)非常方便(bian),比如,應當(dang)可以自動整理(li)(li)格(ge)式(shi)、語法高(gao)亮顯示,集編(bian)譯、鏈接和(he)調試為(wei)一體,方便(bian)實用(yong)。
對于廣泛使用的(de)個(ge)人計算(suan)機來(lai)說(shuo),可以(yi)自由選擇的(de)匯(hui)編(bian)語言編(bian)譯(yi)器有(you)MASM、NASM、TASM、GAS、FASM、RADASM等,但(dan)大(da)都不具備調試功能。如果(guo)是(shi)為了學(xue)習匯(hui)編(bian)語言,輕松(song)匯(hui)編(bian)因為擁有(you)一(yi)個(ge)完善的(de)集成環境,是(shi)一(yi)款非常適(shi)合初學(xue)者的(de)匯(hui)編(bian)編(bian)譯(yi)器。
隨著現(xian)代(dai)軟件(jian)(jian)系統越(yue)來越(yue)龐大(da)復雜(za),大(da)量(liang)經過了封裝的(de)(de)(de)高(gao)級語(yu)(yu)言如C/C++,Pascal/Object Pascal也應運(yun)而(er)生。這些(xie)新的(de)(de)(de)語(yu)(yu)言使得程序員在開(kai)發(fa)過程中能(neng)夠(gou)更(geng)簡單,更(geng)有效率,使軟件(jian)(jian)開(kai)發(fa)人員得以(yi)應付(fu)快速的(de)(de)(de)軟件(jian)(jian)開(kai)發(fa)的(de)(de)(de)要求(qiu)。而(er)匯編語(yu)(yu)言由(you)于(yu)(yu)其復雜(za)性使得其適(shi)用(yong)領域逐步減小。但這并不意味著匯編已無用(yong)武之(zhi)地。由(you)于(yu)(yu)匯編更(geng)接近機器語(yu)(yu)言,能(neng)夠(gou)直接對硬件(jian)(jian)進(jin)行操(cao)作,生成的(de)(de)(de)程序與其他的(de)(de)(de)語(yu)(yu)言相比具有更(geng)高(gao)的(de)(de)(de)運(yun)行速度,占用(yong)更(geng)小的(de)(de)(de)內存,因此在一些(xie)對于(yu)(yu)時效性要求(qiu)很高(gao)的(de)(de)(de)程序、許多(duo)大(da)型(xing)程序的(de)(de)(de)核心模塊以(yi)及工業控制(zhi)方面大(da)量(liang)應用(yong)。
雖然隨著(zhu)半導體技(ji)術、編程技(ji)術的(de)(de)(de)不斷發展,在實際工程應用中確實很少看到匯編語言(yan)(yan)的(de)(de)(de)身影,但這并不能說明(ming)匯編語言(yan)(yan)沒用,已被其(qi)他(ta)高級語言(yan)(yan)所取代(dai)。嵌入式系統的(de)(de)(de)底層(ceng)驅動(dong)、計算(suan)機的(de)(de)(de)BIOS還是要用匯編語言(yan)(yan)實現(xian)。匯編語言(yan)(yan)是培養學生理(li)(li)解硬件資源的(de)(de)(de)語言(yan)(yan),是學習(xi)和(he)理(li)(li)解其(qi)他(ta)高級程序(xu)設(she)計語言(yan)(yan)的(de)(de)(de)基(ji)礎(chu),是計算(suan)機組成原理(li)(li)、接(jie)口與通(tong)信(xin)技(ji)術、計算(suan)機控制(zhi)技(ji)術和(he)數據采集等許多專(zhuan)業(ye)課的(de)(de)(de)前導課程,是必要的(de)(de)(de)基(ji)礎(chu)知識,起著(zhu)承上啟下的(de)(de)(de)作用。