最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

什么是匯編語(yǔ)言

 更新時(shí)間:2020年01月13日 23:40:01   投稿:mdxy-dxy  
匯編語(yǔ)言(assembly language)是一種用于電子計(jì)算機(jī)、微處理器、微控制器或其他可編程器件的低級(jí)語(yǔ)言,亦稱為符號(hào)語(yǔ)言

 匯編語(yǔ)言(assembly language)是一種用于電子計(jì)算機(jī)、微處理器、微控制器或其他可編程器件的低級(jí)語(yǔ)言,亦稱為符號(hào)語(yǔ)言。在匯編語(yǔ)言中,用助記符(Mnemonics)代替機(jī)器指令的操作碼,用地址符號(hào)(Symbol)或標(biāo)號(hào)(Label)代替指令或操作數(shù)的地址。在不同的設(shè)備中,匯編語(yǔ)言對(duì)應(yīng)著不同的機(jī)器語(yǔ)言指令集,通過(guò)匯編過(guò)程轉(zhuǎn)換成機(jī)器指令。普遍地說(shuō),特定的匯編語(yǔ)言和特定的機(jī)器語(yǔ)言指令集是一一對(duì)應(yīng)的,不同平臺(tái)之間不可直接移植。

       許多匯編程序?yàn)槌绦蜷_發(fā)、匯編控制、輔助調(diào)試提供了額外的支持機(jī)制。有的匯編語(yǔ)言編程工具經(jīng)常會(huì)提供宏,它們也被稱為宏匯編器。

       匯編語(yǔ)言不像其他大多數(shù)的程序設(shè)計(jì)語(yǔ)言一樣被廣泛用于程序設(shè)計(jì)。在今天的實(shí)際應(yīng)用中,它通常被應(yīng)用在底層,硬件操作和高要求的程序優(yōu)化的場(chǎng)合。驅(qū)動(dòng)程序、嵌入式操作系統(tǒng)和實(shí)時(shí)運(yùn)行程序都需要匯編語(yǔ)言。

發(fā)展歷程

       說(shuō)到匯編語(yǔ)言的產(chǎn)生,首先要講一下機(jī)器語(yǔ)言。機(jī)器語(yǔ)言是機(jī)器指令的集合。機(jī)器指令展開來(lái)講就是一臺(tái)機(jī)器可以正確執(zhí)行的命令。電子計(jì)算機(jī)的機(jī)器指令是一列二進(jìn)制數(shù)字。計(jì)算機(jī)將之轉(zhuǎn)變?yōu)橐涣懈叩碗娖?,以使?jì)算機(jī)的電子器件受到驅(qū)動(dòng),進(jìn)行運(yùn)算。

       上面所說(shuō)的計(jì)算機(jī)指的是可以執(zhí)行機(jī)器指令,進(jìn)行運(yùn)算的機(jī)器。這是早期計(jì)算機(jī)的概念。在我們常用的PC機(jī)中,有一個(gè)芯片來(lái)完成上面所說(shuō)的計(jì)算機(jī)的功能。這個(gè)芯片就是我們常說(shuō)的CPU(Central Processing Unit,中央處理單元)。每一種微處理器,由于硬件設(shè)計(jì)和內(nèi)部結(jié)構(gòu)的不同,就需要用不同的電平脈沖來(lái)控制,使它工作。所以每一種微處理器都有自己的機(jī)器指令集,也就是機(jī)器語(yǔ)言。CPU 只負(fù)責(zé)計(jì)算,本身不具備智能。你輸入一條指令(instruction),它就運(yùn)行一次,然后停下來(lái),等待下一條指令。這些指令都是二進(jìn)制的,稱為操作碼(opcode),比如加法指令就是00000011。編譯器的作用,就是將高級(jí)語(yǔ)言寫好的程序,翻譯成一條條操作碼。對(duì)于人類來(lái)說(shuō),二進(jìn)制程序是不可讀的,根本看不出來(lái)機(jī)器干了什么。為了解決可讀性的問(wèn)題,以及偶爾的編輯需求,就誕生了匯編語(yǔ)言。匯編語(yǔ)言是二進(jìn)制指令的文本形式,與指令是一一對(duì)應(yīng)的關(guān)系。比如,加法指令00000011寫成匯編語(yǔ)言就是 ADD。只要還原成二進(jìn)制,匯編語(yǔ)言就可以被 CPU 直接執(zhí)行,所以它是最底層的低級(jí)語(yǔ)言。

       早期的程序設(shè)計(jì)均使用機(jī)器語(yǔ)言。程序員們將用0, 1數(shù)字編成的程序代碼打在紙帶或卡片上,1打孔,0不打孔,再將程序通過(guò)紙帶機(jī)或卡片機(jī)輸入計(jì)算機(jī),進(jìn)行運(yùn)算。這樣的機(jī)器語(yǔ)言由純粹的0和1構(gòu)成,十分復(fù)雜,不方便閱讀和修改,也容易產(chǎn)生錯(cuò)誤。程序員們很快就發(fā)現(xiàn)了使用機(jī)器語(yǔ)言帶來(lái)的麻煩,它們難于辨別和記憶,給整個(gè)產(chǎn)業(yè)的發(fā)展帶來(lái)了障礙,于是匯編語(yǔ)言產(chǎn)生了。

       匯編語(yǔ)言的主體是匯編指令。匯編指令和機(jī)器指令的差別在于指令的表示方法上。匯編指令是機(jī)器指令便于記憶的書寫格式。

操作:寄存器BX的內(nèi)容送到AX中
1000100111011000              機(jī)器指令
mov ax,bx                    匯編指令

       此后,程序員們就用匯編指令編寫源程序。可是,計(jì)算機(jī)能讀懂的只有機(jī)器指令,那么如何讓計(jì)算機(jī)執(zhí)行程序員用匯編指令編寫的程序呢?這時(shí),就需要有一個(gè)能夠?qū)R編指令轉(zhuǎn)換成機(jī)器指令的翻譯程序,這樣的程序我們稱其為編譯器。程序員用匯編語(yǔ)言寫出源程序,再用匯編編譯器將其編譯為機(jī)器碼,由計(jì)算機(jī)最終執(zhí)行。

 

語(yǔ)言特點(diǎn)

       匯編語(yǔ)言是直接面向處理器(Processor)的程序設(shè)計(jì)語(yǔ)言。處理器是在指令的控制下工作的,處理器可以識(shí)別的每一條指令稱為機(jī)器指令。每一種處理器都有自己可以識(shí)別的一整套指令,稱為指令集。處理器執(zhí)行指令時(shí),根據(jù)不同的指令采取不同的動(dòng)作,完成不同的功能,既可以改變自己內(nèi)部的工作狀態(tài),也能控制其它外圍電路的工作狀態(tài)。

       匯編語(yǔ)言的另一個(gè)特點(diǎn)就是它所操作的對(duì)象不是具體的數(shù)據(jù),而是寄存器或者存儲(chǔ)器,也就是說(shuō)它是直接和寄存器和存儲(chǔ)器打交道,這也是為什么匯編語(yǔ)言的執(zhí)行速度要比其它語(yǔ)言快,但同時(shí)這也使編程更加復(fù)雜,因?yàn)榧热粩?shù)據(jù)是存放在寄存器或存儲(chǔ)器中,那么必然就存在著尋址方式,也就是用什么方法找到所需要的數(shù)據(jù)。例如上面的例子,我們就不能像高級(jí)語(yǔ)言一樣直接使用數(shù)據(jù),而是先要從相應(yīng)的寄存器AX、BX 中把數(shù)據(jù)取出。這也就增加了編程的復(fù)雜性,因?yàn)樵诟呒?jí)語(yǔ)言中尋址這部分工作是由編譯系統(tǒng)來(lái)完成的,而在匯編語(yǔ)言中是由程序員自己來(lái)完成的,這無(wú)異增加了編程的復(fù)雜程度和程序的可讀性。

       再者,匯編語(yǔ)言指令是機(jī)器指令的一種符號(hào)表示,而不同類型的CPU 有不同的機(jī)器指令系統(tǒng),也就有不同的匯編語(yǔ)言,所以,匯編語(yǔ)言程序與機(jī)器有著密切的關(guān)系。所以,除了同系列、不同型號(hào)CPU 之間的匯編語(yǔ)言程序有一定程度的可移植性之外,其它不同類型(如:小型機(jī)和微機(jī)等)CPU 之間的匯編語(yǔ)言程序是無(wú)法移植的,也就是說(shuō),匯編語(yǔ)言程序的通用性和可移植性要比高級(jí)語(yǔ)言程序低。

       正因?yàn)閰R編語(yǔ)言有“與機(jī)器相關(guān)性”的特性,程序員用匯編語(yǔ)言編寫程序時(shí),可充分對(duì)機(jī)器內(nèi)部的各種資源進(jìn)行合理的安排,讓它們始終處于最佳的使用狀態(tài)。這樣編寫出來(lái)的程序執(zhí)行代碼短、執(zhí)行速度快。匯編語(yǔ)言是各種編程語(yǔ)言中與硬件關(guān)系最密切、最直接的一種,在時(shí)間和空間的效率上也最高的一種。

總體特點(diǎn)

1.機(jī)器相關(guān)性

       這是一種面向機(jī)器的低級(jí)語(yǔ)言,通常是為特定的計(jì)算機(jī)或系列計(jì)算機(jī)專門設(shè)計(jì)的。因?yàn)槭菣C(jī)器指令的符號(hào)化表示,故不同的機(jī)器就有不同的匯編語(yǔ)言。使用匯編語(yǔ)言能面向機(jī)器并較好地發(fā)揮機(jī)器的特性,得到質(zhì)量較高的程序。

2.高速度和高效率

       匯編語(yǔ)言保持了機(jī)器語(yǔ)言的優(yōu)點(diǎn),具有直接和簡(jiǎn)捷的特點(diǎn),可有效地訪問(wèn)、控制計(jì)算機(jī)的各種硬件設(shè)備,如磁盤、存儲(chǔ)器、CPU、I/O端口等,且占用內(nèi)存少,執(zhí)行速度快,是高效的程序設(shè)計(jì)語(yǔ)言。

3.編寫和調(diào)試的復(fù)雜性

       由于是直接控制硬件,且簡(jiǎn)單的任務(wù)也需要很多匯編語(yǔ)言語(yǔ)句,因此在進(jìn)行程序設(shè)計(jì)時(shí)必須面面俱到,需要考慮到一切可能的問(wèn)題,合理調(diào)配和使用各種軟、硬件資源。這樣,就不可避免地加重了程序員的負(fù)擔(dān)。與此相同,在程序調(diào)試時(shí),一旦程序的運(yùn)行出了問(wèn)題,就很難發(fā)現(xiàn)。

優(yōu)點(diǎn)
1、因?yàn)橛脜R編語(yǔ)言設(shè)計(jì)的程序最終被轉(zhuǎn)換成機(jī)器指令,故能夠保持機(jī)器語(yǔ)言的一致性,直接、簡(jiǎn)捷,并能像機(jī)器指令一樣訪問(wèn)、控制計(jì)算機(jī)的各種硬件設(shè)備,如磁盤、存儲(chǔ)器、CPU、I/O端口等。使用匯編語(yǔ)言,可以訪問(wèn)所有能夠被訪問(wèn)的軟、硬件資源。

2、目標(biāo)代碼簡(jiǎn)短,占用內(nèi)存少,執(zhí)行速度快,是高效的程序設(shè)計(jì)語(yǔ)言,經(jīng)常與高級(jí)語(yǔ)言配合使用,以改善程序的執(zhí)行速度和效率,彌補(bǔ)高級(jí)語(yǔ)言在硬件控制方面的不足,應(yīng)用十分廣泛。

缺點(diǎn)
1、匯編語(yǔ)言是面向機(jī)器的,處于整個(gè)計(jì)算機(jī)語(yǔ)言層次結(jié)構(gòu)的底層,故被視為一種低級(jí)語(yǔ)言,通常是為特定的計(jì)算機(jī)或系列計(jì)算機(jī)專門設(shè)計(jì)的。不同的處理器有不同的匯編語(yǔ)言語(yǔ)法和編譯器,編譯的程序無(wú)法在不同的處理器上執(zhí)行,缺乏可移植性;

2、難于從匯編語(yǔ)言代碼上理解程序設(shè)計(jì)意圖,可維護(hù)性差,即使是完成簡(jiǎn)單的工作也需要大量的匯編語(yǔ)言代碼,很容易產(chǎn)生bug,難于調(diào)試;

3、使用匯編語(yǔ)言必須對(duì)某種處理器非常了解,而且只能針對(duì)特定的體系結(jié)構(gòu)和處理器進(jìn)行優(yōu)化,開發(fā)效率很低,周期長(zhǎng)且單調(diào)。 

語(yǔ)言組成

數(shù)據(jù)傳送指令
這部分指令包括通用數(shù)據(jù)傳送指令MOV、條件傳送指令CMOVcc、堆棧操作指令PUSH/PUSHA/PUSHAD/POP/POPA/POPAD、交換指令XCHG/XLAT/BSWAP、地址或段描述符選擇子傳送指令LEA/LDS/LES/LFS/LGS/LSS等。注意,CMOVcc不是一條具體的指令,而是一個(gè)指令簇,包括大量的指令,用于根據(jù)EFLAGS寄存器的某些位狀態(tài)來(lái)決定是否執(zhí)行指定的傳送操作。

整數(shù)和邏輯運(yùn)算指令

這部分指令用于執(zhí)行算術(shù)和邏輯運(yùn)算,包括加法指令A(yù)DD/ADC、減法指令SUB/SBB、加一指令I(lǐng)NC、減一指令DEC、比較操作指令CMP、乘法指令MUL/IMUL、除法指令DIV/IDIV、符號(hào)擴(kuò)展指令CBW/CWDE/CDQE、十進(jìn)制調(diào)整指令DAA/DAS/AAA/AAS、邏輯運(yùn)算指令NOT/AND/OR/XOR/TEST等。

移位指令

這部分指令用于將寄存器或內(nèi)存操作數(shù)移動(dòng)指定的次數(shù)。包括邏輯左移指令SHL、邏輯右移指令SHR、算術(shù)左移指令SAL、算術(shù)右移指令SAR、循環(huán)左移指令ROL、循環(huán)右移指令ROR等。

位操作指令

這部分指令包括位測(cè)試指令BT、位測(cè)試并置位指令BTS、位測(cè)試并復(fù)位指令BTR、位測(cè)試并取反指令BTC、位向前掃描指令BSF、位向后掃描指令BSR等。

條件設(shè)置指令

這不是一條具體的指令,而是一個(gè)指令簇,包括大約30條指令,用于根據(jù)EFLAGS寄存器的某些位狀態(tài)來(lái)設(shè)置一個(gè)8位的寄存器或者內(nèi)存操作數(shù)。比如SETE/SETNE/SETGE等等。

控制轉(zhuǎn)移指令

這部分包括無(wú)條件轉(zhuǎn)移指令JMP、條件轉(zhuǎn)移指令Jcc/JCXZ、循環(huán)指令LOOP/LOOPE/LOOPNE、過(guò)程調(diào)用指令CALL、子過(guò)程返回指令RET、中斷指令I(lǐng)NTn、INT3、INTO、IRET等。注意,Jcc是一個(gè)指令簇,包含了很多指令,用于根據(jù)EFLAGS寄存器的某些位狀態(tài)來(lái)決定是否轉(zhuǎn)移;INT n是軟中斷指令,n可以是0到255之間的數(shù),用于指示中斷向量號(hào)。

串操作指令
這部分指令用于對(duì)數(shù)據(jù)串進(jìn)行操作,包括串傳送指令MOVS、串比較指令CMPS、串掃描指令SCANS、串加載指令LODS、串保存指令STOS,這些指令可以有選擇地使用REP/REPE/REPZ/REPNE和REPNZ的前綴以連續(xù)操作。

輸入輸出指令
這部分指令用于同外圍設(shè)備交換數(shù)據(jù),包括端口輸入指令I(lǐng)N/INS、端口輸出指令OUT/OUTS。

高級(jí)語(yǔ)言輔助指令

這部分指令為高級(jí)語(yǔ)言的編譯器提供方便,包括創(chuàng)建棧幀的指令ENTER和釋放棧幀的指令LEAVE。

控制和特權(quán)指令

這部分包括無(wú)操作指令NOP、停機(jī)指令HLT、等待指令WAIT/MWAIT、換碼指令ESC、總線封鎖指令LOCK、內(nèi)存范圍檢查指令BOUND、全局描述符表操作指令LGDT/SGDT、中斷描述符表操作指令LIDT/SIDT、局部描述符表操作指令LLDT/SLDT、描述符段界限值加載指令LSR、描述符訪問(wèn)權(quán)讀取指令LAR、任務(wù)寄存器操作指令LTR/STR、請(qǐng)求特權(quán)級(jí)調(diào)整指令A(yù)RPL、任務(wù)切換標(biāo)志清零指令CLTS、控制寄存器和調(diào)試寄存器數(shù)據(jù)傳送指令MOV、高速緩存控制指令I(lǐng)NVD/WBINVD/INVLPG、型號(hào)相關(guān)寄存器讀取和寫入指令RDMSR/WRMSR、處理器信息獲取指令CPUID、時(shí)間戳讀取指令RDTSC等。

浮點(diǎn)和多媒體指令

這部分指令用于加速浮點(diǎn)數(shù)據(jù)的運(yùn)算,以及用于加速多媒體數(shù)據(jù)處理的單指令多數(shù)據(jù)(SIMD及其擴(kuò)展SSEx)指令。這部分指令數(shù)據(jù)非常龐大,無(wú)法一一列舉,請(qǐng)自行參考INTEL手冊(cè)。

虛擬機(jī)擴(kuò)展指令

這部分指令包括INVEPT/INVVPID/VMCALL/VMCLEAR/VMLAUNCH/VMRESUME/VMPTRLD/VMPTRST/VMREAD/VMWRITE/VMXOFF/VMON等。 

相關(guān)技術(shù)

匯編器
典型的現(xiàn)代匯編器(assembler)建造目標(biāo)代碼,由解譯組語(yǔ)指令集的易記碼(mnemonics)到操作碼(OpCode),并解析符號(hào)名稱(symbolic names)成為存儲(chǔ)器地址以及其它的實(shí)體。使用符號(hào)參考是匯編器的一個(gè)重要特征,它可以節(jié)省修改程序后人工轉(zhuǎn)址的乏味耗時(shí)計(jì)算?;揪褪前褭C(jī)器碼變成一些字母而已,編譯的時(shí)候再把輸入的指令字母替換成為晦澀難懂機(jī)器碼。

編譯環(huán)境
用匯編語(yǔ)言等非機(jī)器語(yǔ)言書寫好的符號(hào)程序稱為源程序,匯編語(yǔ)言編譯器的作用是將源程序翻譯成目標(biāo)程序。目標(biāo)程序是機(jī)器語(yǔ)言程序,當(dāng)它被安置在內(nèi)存的預(yù)定位置上后,就能被計(jì)算機(jī)的CPU處理和執(zhí)行。

匯編的調(diào)試環(huán)境總的來(lái)說(shuō)比較少,也很少有非常好的編譯器。編譯器的選擇依賴于目標(biāo)處理器的類型和具體的系統(tǒng)平臺(tái)。一般來(lái)說(shuō),功能良好的編譯器用起來(lái)應(yīng)當(dāng)非常方便,比如,應(yīng)當(dāng)可以自動(dòng)整理格式、語(yǔ)法高亮顯示,集編譯、鏈接和調(diào)試為一體,方便實(shí)用。

對(duì)于廣泛使用的個(gè)人計(jì)算機(jī)來(lái)說(shuō),可以自由選擇的匯編語(yǔ)言編譯器有MASM、NASM、TASM、GAS、FASM、RADASM等,但大都不具備調(diào)試功能。如果是為了學(xué)習(xí)匯編語(yǔ)言,輕松匯編因?yàn)閾碛幸粋€(gè)完善的集成環(huán)境,是一款非常適合初學(xué)者的匯編編譯器。 

發(fā)展前景
匯編語(yǔ)言是機(jī)器語(yǔ)言的助記符,相對(duì)于比枯燥的機(jī)器代碼易于讀寫、易于調(diào)試和修改,同時(shí)優(yōu)秀的匯編語(yǔ)言設(shè)計(jì)者經(jīng)過(guò)巧妙的設(shè)計(jì),使得匯編語(yǔ)言匯編后的代碼比高級(jí)語(yǔ)言執(zhí)行速度更快,占內(nèi)存空間少等優(yōu)點(diǎn),但匯編語(yǔ)言的運(yùn)行速度和空間占用是針對(duì)高級(jí)語(yǔ)言并且需要巧妙設(shè)計(jì),而且部分高級(jí)語(yǔ)言在編譯后代碼執(zhí)行效率同樣很高,所以此優(yōu)點(diǎn)慢慢弱化。而且在編寫復(fù)雜程序時(shí)具有明顯的局限性,匯編語(yǔ)言依賴于具體的機(jī)型,不能通用,也不能在不同機(jī)型之間移植。常說(shuō)匯編語(yǔ)言是低級(jí)語(yǔ)言,并不是說(shuō)匯編語(yǔ)言要被棄之,相反,匯編語(yǔ)言仍然是計(jì)算機(jī)(或微機(jī))底層設(shè)計(jì)程序員必須了解的語(yǔ)言,在某些行業(yè)與領(lǐng)域,匯編是必不可少的,非它不可適用。只是,現(xiàn)在計(jì)算機(jī)最大的領(lǐng)域?yàn)镮T軟件,也是我們常說(shuō)的計(jì)算機(jī)應(yīng)用軟件編程,在熟練的程序員手里,使用匯編語(yǔ)言編寫的程序,運(yùn)行效率與性能比其它語(yǔ)言寫的程序相對(duì)提高,但是代價(jià)是需要更長(zhǎng)的時(shí)間來(lái)優(yōu)化,如果對(duì)計(jì)算機(jī)原理及編程基礎(chǔ)不扎實(shí),反而增加其開發(fā)難度,實(shí)在是得不償失,對(duì)比2010年前后的軟件開發(fā),已經(jīng)是市場(chǎng)化的軟件行業(yè),加上高級(jí)語(yǔ)言的優(yōu)秀與跨平臺(tái),一個(gè)公司不可以讓一個(gè)團(tuán)隊(duì)使用匯編語(yǔ)言來(lái)編寫所有的東西,花上幾倍甚至幾十倍的時(shí)間,不如使用其它語(yǔ)言來(lái)完成,只要最終結(jié)果不比匯編語(yǔ)言編寫的差太多,就能搶先一步完成,這是市場(chǎng)經(jīng)濟(jì)下的必然結(jié)果。

但是,迄今為止,還沒(méi)有程序員敢斷定匯編語(yǔ)言是不需要學(xué)的,同時(shí),匯編語(yǔ)言(Assembly Language)是面向機(jī)器的程序設(shè)計(jì)語(yǔ)言,設(shè)計(jì)精湛的匯編程序員,部分已經(jīng)脫離軟件開發(fā),擠身于工業(yè)電子編程中。對(duì)于功能相對(duì)小巧但硬件對(duì)語(yǔ)言設(shè)計(jì)要求苛刻的行業(yè),如4位單片機(jī),由于其容量及運(yùn)算,此行業(yè)的電子工程師一般負(fù)責(zé)從開發(fā)設(shè)計(jì)電路及軟件控制,主要開發(fā)語(yǔ)言就是匯編,c語(yǔ)言使用只占極少部分,而電子開發(fā)工程師是千金難求,在一些工業(yè)公司,一個(gè)核心的電子工程師比其它任何職員待遇都高,對(duì)比起來(lái),一般電子工程師待遇是程序員的十倍以上。這種情況是因?yàn)?1世紀(jì)以來(lái),學(xué)習(xí)匯編的人雖然也不少,但是真正能學(xué)到精通的卻不多,它相對(duì)于高級(jí)語(yǔ)言難學(xué),難用,適用范圍小,雖然簡(jiǎn)單,但是過(guò)于靈活,學(xué)習(xí)過(guò)高級(jí)語(yǔ)言的人去學(xué)習(xí)匯編比一開始學(xué)匯編的人難得多,但是學(xué)過(guò)匯編的人學(xué)習(xí)高級(jí)語(yǔ)言卻很容易,簡(jiǎn)從繁易,繁從簡(jiǎn)難。對(duì)于一個(gè)全面了解微機(jī)原理的程序員,匯編語(yǔ)言是必修語(yǔ)言。

實(shí)際應(yīng)用
隨著現(xiàn)代軟件系統(tǒng)越來(lái)越龐大復(fù)雜,大量經(jīng)過(guò)了封裝的高級(jí)語(yǔ)言如C/C++,Pascal/Object Pascal也應(yīng)運(yùn)而生。這些新的語(yǔ)言使得程序員在開發(fā)過(guò)程中能夠更簡(jiǎn)單,更有效率,使軟件開發(fā)人員得以應(yīng)付快速的軟件開發(fā)的要求。而匯編語(yǔ)言由于其復(fù)雜性使得其適用領(lǐng)域逐步減小。但這并不意味著匯編已無(wú)用武之地。由于匯編更接近機(jī)器語(yǔ)言,能夠直接對(duì)硬件進(jìn)行操作,生成的程序與其他的語(yǔ)言相比具有更高的運(yùn)行速度,占用更小的內(nèi)存,因此在一些對(duì)于時(shí)效性要求很高的程序、許多大型程序的核心模塊以及工業(yè)控制方面大量應(yīng)用。 

歷史上,匯編語(yǔ)言曾經(jīng)是非常流行的程序設(shè)計(jì)語(yǔ)言之一。隨著軟件規(guī)模的增長(zhǎng),以及隨之而來(lái)的對(duì)軟件開發(fā)進(jìn)度和效率的要求,高級(jí)語(yǔ)言逐漸取代了匯編語(yǔ)言。但即便如此,高級(jí)語(yǔ)言也不可能完全替代匯編語(yǔ)言的作用。就拿Linux內(nèi)核來(lái)講,雖然絕大部分代碼是用C語(yǔ)言編寫的,但仍然不可避免地在某些關(guān)鍵地方使用了匯編代碼。由于這部分代碼與硬件的關(guān)系非常密切,即使是C語(yǔ)言也會(huì)顯得力不從心,而匯編語(yǔ)言則能夠很好揚(yáng)長(zhǎng)避短,最大限度地發(fā)揮硬件的性能。

首先,匯編語(yǔ)言的大部分語(yǔ)句直接對(duì)應(yīng)著機(jī)器指令,執(zhí)行速度快,效率高,代碼體積小,在那些存儲(chǔ)器容量有限,但需要快速和實(shí)時(shí)響應(yīng)的場(chǎng)合比較有用,比如儀器儀表和工業(yè)控制設(shè)備中。

其次,在系統(tǒng)程序的核心部分,以及與系統(tǒng)硬件頻繁打交道的部分,可以使用匯編語(yǔ)言。比如操作系統(tǒng)的核心程序段、I/O接口電路的初始化程序、外部設(shè)備的低層驅(qū)動(dòng)程序,以及頻繁調(diào)用的子程序、動(dòng)態(tài)連接庫(kù)、某些高級(jí)繪圖程序、視頻游戲程序等等。

再次,匯編語(yǔ)言可以用于軟件的加密和解密、計(jì)算機(jī)病毒的分析和防治,以及程序的調(diào)試和錯(cuò)誤分析等各個(gè)方面。

最后,通過(guò)學(xué)習(xí)匯編語(yǔ)言,能夠加深對(duì)計(jì)算機(jī)原理和操作系統(tǒng)等課程的理解。通過(guò)學(xué)習(xí)和使用匯編語(yǔ)言,能夠感知、體會(huì)和理解機(jī)器的邏輯功能,向上為理解各種軟件系統(tǒng)的原理,打下技術(shù)理論基礎(chǔ);向下為掌握硬件系統(tǒng)的原理,打下實(shí)踐應(yīng)用基礎(chǔ)。

附注:寄存器和內(nèi)存模型

學(xué)習(xí)匯編語(yǔ)言,首先必須了解兩個(gè)知識(shí)點(diǎn):寄存器和內(nèi)存模型。

先來(lái)看寄存器。CPU 本身只負(fù)責(zé)運(yùn)算,不負(fù)責(zé)儲(chǔ)存數(shù)據(jù)。數(shù)據(jù)一般都儲(chǔ)存在內(nèi)存之中,CPU 要用的時(shí)候就去內(nèi)存讀寫數(shù)據(jù)。但是,CPU 的運(yùn)算速度遠(yuǎn)高于內(nèi)存的讀寫速度,為了避免被拖慢,CPU 都自帶一級(jí)緩存和二級(jí)緩存?;旧希珻PU 緩存可以看作是讀寫速度較快的內(nèi)存。

但是,CPU 緩存還是不夠快,另外數(shù)據(jù)在緩存里面的地址是不固定的,CPU 每次讀寫都要尋址也會(huì)拖慢速度。因此,除了緩存之外,CPU 還自帶了寄存器(register),用來(lái)儲(chǔ)存最常用的數(shù)據(jù)。也就是說(shuō),那些最頻繁讀寫的數(shù)據(jù)(比如循環(huán)變量),都會(huì)放在寄存器里面,CPU 優(yōu)先讀寫寄存器,再由寄存器跟內(nèi)存交換數(shù)據(jù)。

相關(guān)文章

  • 匯編語(yǔ)言中的各種寄存器介紹

    匯編語(yǔ)言中的各種寄存器介紹

    匯編語(yǔ)言(assembly language)是一種用于電子計(jì)算機(jī)、微處理器、微控制器或其他可編程器件的低級(jí)語(yǔ)言,亦稱為符號(hào)語(yǔ)言.這篇文章主要介紹了匯編語(yǔ)言中的各種寄存器介紹,需要的朋友可以參考下
    2020-01-01
  • 匯編語(yǔ)言中的segment

    匯編語(yǔ)言中的segment

    segment是段的意思,是段定義偽指令,一個(gè)正常的應(yīng)用程序被由若干個(gè) segment組成,接下來(lái)通過(guò)本文給大家介紹匯編語(yǔ)言中的segment,需要的朋友可以參考下
    2020-01-01
  • 匯編實(shí)現(xiàn)直接插入排序的方法示例

    匯編實(shí)現(xiàn)直接插入排序的方法示例

    這篇文章主要介紹了匯編實(shí)現(xiàn)直接插入排序的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • x86匯編DOS編程環(huán)境搭建過(guò)程

    x86匯編DOS編程環(huán)境搭建過(guò)程

    在學(xué)習(xí)x86匯編時(shí),第一步是搭建一個(gè)可以編譯、運(yùn)行代碼的環(huán)境,這個(gè)搭建方法也真的超簡(jiǎn)單,本文重點(diǎn)給大家介紹x86匯編DOS編程環(huán)境搭建過(guò)程,感興趣的朋友一起看看吧
    2021-11-11
  • 匯編語(yǔ)言之寄存器(詳細(xì)介紹)

    匯編語(yǔ)言之寄存器(詳細(xì)介紹)

    這篇文章主要介紹了匯編語(yǔ)言之寄存器(詳細(xì)介紹),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • 匯編語(yǔ)言指令mov、add、sub、jmp詳解

    匯編語(yǔ)言指令mov、add、sub、jmp詳解

    這篇文章主要介紹了匯編語(yǔ)言指令mov、add、sub、jmp詳解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • os_object_release Crash 排查記錄分析

    os_object_release Crash 排查記錄分析

    這篇文章主要為大家介紹了os_object_release Crash 排查記錄分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • UEFI開發(fā)基礎(chǔ)HII代碼示例

    UEFI開發(fā)基礎(chǔ)HII代碼示例

    這篇文章主要為大家介紹了UEFI開發(fā)基礎(chǔ)HII代碼示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • UEFI開發(fā)實(shí)戰(zhàn)SlimBootloader中調(diào)用FSP

    UEFI開發(fā)實(shí)戰(zhàn)SlimBootloader中調(diào)用FSP

    這篇文章主要為大家介紹了UEFI開發(fā)實(shí)戰(zhàn)SlimBootloader中調(diào)用FSP基礎(chǔ)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 從Go匯編角度解讀for循環(huán)的問(wèn)題

    從Go匯編角度解讀for循環(huán)的問(wèn)題

    Go常用的遍歷方式有兩種:for和for-range。這篇文章主要介紹了從Go匯編角度解讀for循環(huán)的兩個(gè)疑點(diǎn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論

神池县| 宜宾县| 油尖旺区| 宝鸡市| 泊头市| 凌海市| 黄浦区| 长顺县| 阜新市| 专栏| 凤庆县| 永吉县| 天津市| 轮台县| 綦江县| 镇平县| 沙洋县| 大渡口区| 马尔康县| 昆明市| 清水河县| 沅陵县| 汾西县| 富蕴县| 博客| 砀山县| 南宁市| 甘德县| 新昌县| 彝良县| 天水市| 梁河县| 沁阳市| 镇宁| 尚志市| 南和县| 大宁县| 庆安县| 织金县| 呼和浩特市| 武汉市|