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