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