『壹』 計算機系統中主要有哪幾種寄存器它們的作用分別是什麼
計算機寄存器分類簡介:
32位CPU所含有的寄存器有:
4個數據寄存器(EAX、EBX、ECX和EDX)
2個變址和指針寄存器(ESI和EDI) 2個指針寄存器(ESP和EBP)
6個段寄存器(ES、CS、SS、DS、FS和GS)
1個指令指針寄存器(EIP) 1個標志寄存器(EFlags)
1、數據寄存器
數據寄存器主要用來保存操作數和運算結果等信息,從而節省讀取操作數所需佔用匯流排和訪問存儲器的時間。
32位CPU有4個32位的通用寄存器EAX、EBX、ECX和EDX。
對低16位數據的存取,不會影響高16位的數據。
這些低16位寄存器分別命名為:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4個16位寄存器又可分割成8個獨立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每個寄存器都有自己的名稱,可獨立存取。
程序員可利用數據寄存器的這種「可分可合」的特性,靈活地處理字/位元組的信息。
寄存器EAX通常稱為累加器(Accumulator),用累加器進行的操作可能需要更少時間。可用於乘、 除、輸入/輸出等操作,使用頻率很高;
寄存器EBX稱為基地址寄存器(Base Register)。它可作為存儲器指針來使用;
寄存器ECX稱為計數寄存器(Count Register)。
在循環和字元串操作時,要用它來控制循環次數;在位操作中,當移多位時,要用CL來指明移位的位數;
寄存器EDX稱為數據寄存器(Data Register)。在進行乘、除運算時,它可作為默認的操作數參與運算,也可用於存放I/O的埠地址。
在16位CPU中,AX、BX、CX和DX不能作為基址和變址寄存器來存放存儲單元的地址,
在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不僅可傳送數據、暫存數據保存算術邏輯運算結果,
而且也可作為指針寄存器,所以,這些32位寄存器更具有通用性。
2、變址寄存器
32位CPU有2個32位通用寄存器ESI和EDI。
其低16位對應先前CPU中的SI和DI,對低16位數據的存取,不影響高16位的數據。
寄存器ESI、EDI、SI和DI稱為變址寄存器(Index Register),它們主要用於存放存儲單元在段內的偏移量,
用它們可實現多種存儲器操作數的定址方式,為以不同的地址形式訪問存儲單元提供方便。
變址寄存器不可分割成8位寄存器。作為通用寄存器,也可存儲算術邏輯運算的操作數和運算結果。
它們可作一般的存儲器指針使用。在字元串操作指令的執行過程中,對它們有特定的要求,而且還具有特殊的功能。
3、指針寄存器
其低16位對應先前CPU中的BP和SP,對低16位數據的存取,不影響高16位的數據。
32位CPU有2個32位通用寄存器EBP和ESP。
它們主要用於訪問堆棧內的存儲單元,並且規定:
EBP為基指針(Base Pointer)寄存器,用它可直接存取堆棧中的數據;
ESP為堆棧指針(Stack Pointer)寄存器,用它只可訪問棧頂。
寄存器EBP、ESP、BP和SP稱為指針寄存器(Pointer Register),主要用於存放堆棧內存儲單元的偏移量,
用它們可實現多種存儲器操作數的定址方式,為以不同的地址形式訪問存儲單元提供方便。
指針寄存器不可分割成8位寄存器。作為通用寄存器,也可存儲算術邏輯運算的操作數和運算結果。
4、段寄存器
段寄存器是根據內存分段的管理模式而設置的。內存單元的物理地址由段寄存器的值和一個偏移量組合而成
的,這樣可用兩個較少位數的值組合成一個可訪問較大物理空間的內存地址。
CPU內部的段寄存器:
ECS——代碼段寄存器(Code Segment Register),其值為代碼段的段值;
EDS——數據段寄存器(Data Segment Register),其值為數據段的段值;
EES——附加段寄存器(Extra Segment Register),其值為附加數據段的段值;
ESS——堆棧段寄存器(Stack Segment Register),其值為堆棧段的段值;
EFS——附加段寄存器(Extra Segment Register),其值為附加數據段的段值;
EGS——附加段寄存器(Extra Segment Register),其值為附加數據段的段值。
在16位CPU系統中,它只有4個段寄存器,所以,程序在任何時刻至多有4個正在使用的段可直接訪問;在32位
微機系統中,它有6個段寄存器,所以,在此環境下開發的程序最多可同時訪問6個段。
32位CPU有兩個不同的工作方式:實方式和保護方式。在每種方式下,段寄存器的作用是不同的。有關規定簡
單描述如下:
實方式: 前4個段寄存器CS、DS、ES和SS與先前CPU中的所對應的段寄存器的含義完全一致,內存單元的邏輯
地址仍為「段值:偏移量」的形式。為訪問某內存段內的數據,必須使用該段寄存器和存儲單元的偏移量。
保護方式: 在此方式下,情況要復雜得多,裝入段寄存器的不再是段值,而是稱為「選擇子」(Selector)的某個值。。
5、指令指針寄存器
32位CPU把指令指針擴展到32位,並記作EIP,EIP的低16位與先前CPU中的IP作用相同。
指令指針EIP、IP(Instruction Pointer)是存放下次將要執行的指令在代碼段的偏移量。
在具有預取指令功能的系統中,下次要執行的指令通常已被預取到指令隊列中,除非發生轉移情況。
所以,在理解它們的功能時,不考慮存在指令隊列的情況。
6、標志寄存器
一、運算結果標志位
1、進位標志CF(Carry Flag)
進位標志CF主要用來反映運算是否產生進位或借位。如果運算結果的最高位產生了一個進位或借位,那麼,其值為1,否則其值為0。
使用該標志位的情況有:多字(位元組)數的加減運算,無符號數的大小比較運算,移位操作,字(位元組)之間移位,專門改變CF值的指令等。
2、奇偶標志PF(Parity Flag)
奇偶標志PF用於反映運算結果中「1」的個數的奇偶性。如果「1」的個數為偶數,則PF的值為1,否則其值為0。
利用PF可進行奇偶校驗檢查,或產生奇偶校驗位。在數據傳送過程中,為了提供傳送的可靠性,如果採用奇偶校驗的方法,就可使用該標志位。
3、輔助進位標志AF(Auxiliary Carry Flag)
在發生下列情況時,輔助進位標志AF的值被置為1,否則其值為0:
(1)、在字操作時,發生低位元組向高位元組進位或借位時;
(2)、在位元組操作時,發生低4位向高4位進位或借位時。
對以上6個運算結果標志位,在一般編程情況下,標志位CF、ZF、SF和OF的使用頻率較高,而標志位PF和AF的使用頻率較低。
4、零標志ZF(Zero Flag)
零標志ZF用來反映運算結果是否為0。如果運算結果為0,則其值為1,否則其值為0。在判斷運算結果是否為0時,可使用此標志位。
5、符號標志SF(Sign Flag)
符號標志SF用來反映運算結果的符號位,它與運算結果的最高位相同。在微機系統中,有符號數採用碼表示法,所以,SF也就反映運算結果的正負號。運算結果為正數時,SF的值為0,否則其值為1。
6、溢出標志OF(Overflow Flag)
溢出標志OF用於反映有符號數加減運算所得結果是否溢出。如果運算結果超過當前運算位數所能表示的范圍,則稱為溢出,OF的值被置為1,否則,OF的值被清為0。
「溢出」和「進位」是兩個不同含義的概念,不要混淆。如果不太清楚的話,請查閱《計算機組成原理》課程中的有關章節。
二、狀態控制標志位
狀態控制標志位是用來控制CPU操作的,它們要通過專門的指令才能使之發生改變。
1、追蹤標志TF(Trap Flag)
當追蹤標志TF被置為1時,CPU進入單步執行方式,即每執行一條指令,產生一個單步中斷請求。這種方式主要用於程序的調試。
指令系統中沒有專門的指令來改變標志位TF的值,但程序員可用其它辦法來改變其值。
2、中斷允許標志IF(Interrupt-enable Flag)
中斷允許標志IF是用來決定CPU是否響應CPU外部的可屏蔽中斷發出的中斷請求。
但不管該標志為何值,CPU都必須響應CPU外部的不可屏蔽中斷所發出的中斷請求,以及CPU內部產生的中斷請求。
具體規定如下:
(1)、當IF=1時,CPU可以響應CPU外部的可屏蔽中斷發出的中斷請求;
(2)、當IF=0時,CPU不響應CPU外部的可屏蔽中斷發出的中斷請求。
CPU的指令系統中也有專門的指令來改變標志位IF的值。
3、方向標志DF(Direction Flag)
方向標志DF用來決定在串操作指令執行時有關指針寄存器發生調整的方向。具體規定在第5.2.11節——字元串操作指令——中給出。
在微機的指令系統中,還提供了專門的指令來改變標志位DF的值。
三、32位標志寄存器增加的標志位
1、I/O特權標志IOPL(I/O Privilege Level)
I/O特權標志用兩位二進制位來表示,也稱為I/O特權級欄位。該欄位指定了要求執行I/O指令的特權級。
如果當前的特權級別在數值上小於等於IOPL的值,那麼,該I/O指令可執行,否則將發生一個保護異常。
2、嵌套任務標志NT(Nested Task)
嵌套任務標志NT用來控制中斷返回指令IRET的執行。具體規定如下:
(1)、當NT=0,用堆棧中保存的值恢復EFLAGS、CS和EIP,執行常規的中斷返回操作;
(2)、當NT=1,通過任務轉換實現中斷返回。
3、重啟動標志RF(Restart Flag)
重啟動標志RF用來控制是否接受調試故障。規定:RF=0時,表示「接受」調試故障,否則拒絕之。
在成功執行完一條指令後,處理機把RF置為0,當接受到一個非調試故障時,處理機就把它置為1。
4、虛擬8086方式標志VM(Virtual 8086 Mode)
如果該標志的值為1,則表示處理機處於虛擬的8086方式下的工作狀態,否則,處理機處於一般保護方式下的工作狀態。
『貳』 CPU內部寄存器組結構及其功能是什麼
1.什麼是寄存器 所謂寄存器(register),它是CPU內部用來存放數據的一些小型存儲區域,用來暫時存放參與運算的數據和運算結果。其實寄存器就是一種常用的時序邏輯電路,但這種時序邏輯電路只包含存儲電路。寄存器的存儲電路是由鎖存器或觸發器構成的,因為一個鎖存器或觸發器能存儲1位二進制數,所以由N個鎖存器或觸發器可以構成N位寄存器。 2.寄存器與CPU指令 在講CPU的寄存器之前,我們先了解一下CPU指令系統。指令系統指的是一個CPU所能夠處理的全部指令的集合,Athlon XP和P4都是基於x86指令集,這是CPU的根本屬性,決定CPU運行什麼樣的程序。 指令一般分為:算術邏輯運算指令、浮點運算指令、位操作指令及其他的一些非運算指令,其中整數、地址、指令指針和浮點數據是按照數據形式來劃分的。通常我們把需要CPU進行不同處理的單個數據稱為標量數據(Scala Data)。標量數據既可以是整數數據,也可以是浮點數據。其中整數標量數據的存放區一般為通用寄存器(GPR),浮點標量數據的存放區一般為浮點寄存器(FPR)。與標量數據相對的是矢量數據(Vector Data),所謂矢量數據就是指一列需要由處理器作相同處理的數據集合。比如處理器在做MP3編碼的過程中,需要對內存中的音頻文件里的各位元組數據作相同的MP3編碼操作。那麼通常使用MMX或SSE這類單指令多數據流(SIMD)指令,將數個位元組打包為一組矢量數據,存放在MMX或SSE寄存器中,再送往相應的功能單元進行統一操作。 其中通用寄存器是處理器中最快的存儲器,用來保存參加運算的操作數和中間結果。在通用寄存器的設計上,RISC與CISC(也就是我們常說的x86架構)有著很大的不同。CISC的寄存器通常很少——只有8個通用寄存器。由於CPU在執行指令過程中,存在指令依賴性,在一定程度上使得x86 CPU不能在每個時鍾周期中立即發布大量的指令。所謂「依賴性」就是指令的執行需要前個指令的運算結果。比如程序員經常使用的分支程序,請看下面這個例子: A=C*1 B=A+2 只要變數A的值還不知道,B=A+2就不能進行運算。也就是說,只要指令1的結果沒有寫進寄存器,CPU調度器就不能把指令2發布到執行單元。由於程序分支會造成具有較長流水線CPU運行停滯的,目前常用的解決方法是採用分支預測。 不過,分支預測同樣存在一個問題:流水線越長,指令潛伏期也越長,等待前一指令運算結果的時間也越長,同樣會造成CPU運行停滯。我們知道,程序指令通常都有各類型的條件分支語句,通過驗證條件決定執行路線。但CPU執行單元內是通過一項特殊的預測機制選擇一條路線直接執行(這樣可以避免驗證語句條件而處於等待情況),然後在後面進行驗證。如果預測正確則繼續往下執行,如果發現以前的預測錯誤,那麼就必須返回原地重新開始,以前的指令就會作廢。 因此,管線越長,意味著出現分支預測錯誤的機會就越多,越多在管線內的指令會被清除掉,而且重新讓管道填滿指令的時間也會越長。對於普通處理器來說,如果出現分支預測錯誤,CPU就不得不將整條流水線清空後從錯誤的地方重新裝滿數據、重新執行。毫無疑問這將花更多的時間,整體性能就會下降。因此,針對通用寄存器少的問題,在x86架構中比較完美的解決方法就是增加寄存器的數量和採用「亂序執行」。3.為什麼寄存器不夠用 在上面我們已經提到,寄存器只是用來暫時存放指令值的,如果CPU需要把兩個值加起來,它需要用1個寄存器來存放運算結果,用2個寄存器來存放相加的數值。例如,在以下的方程式中:A = 2 + 4 * 在寄存器1儲存「2」; * 在寄存器2儲存「4」; * 在寄存器3儲存「寄存器1 + 寄存器 2」; 因為在微處理器裡面有超過3個寄存器,因此這個運算能夠輕易地執行,不會造成用光寄存器的情況。在這些運算被執行之後,所有的3個數值都能夠被保留並重新使用,因此如果我們再想在結果加上2的話,處理器只需要執行:寄存器 1 + 寄存器 3 就可以了。如果微處理器僅有2個剩餘的寄存器,而我們又需要再次使用2和4的值,那麼這些值在覆蓋結果A之前,必須儲存在主內存之中 。運算執行的過程則會變成如下所示: * 在寄存器1儲存 「2」; * 在寄存器2儲存「4」; * 在主內存的某個空間儲存「寄存器1 + 寄存器2」; 我們可以看到這里使用了其它的內存訪問過程,而在這期間其實還有我們沒有提到的其它處理過程,比如主內存的定位也需要佔據寄存器,以便讓CPU 告訴裝載/儲存單元該往哪裡發送數據 。如果我們需要使用到這些結果的話,那麼CPU將不得不首先到主內存中找回這些結果,把目前滿載的寄存器驅逐一些數據,把它們寫入主內存,然後再把尋找到的數據儲存在寄存器里。 這里大家應該能夠明白吧,對內存的訪問次數將會可怕地增加;你需要訪問內存的時間越多,那麼處理器等待工作完成的時間就越長——因而造成性能的下降。因此面對超標量CPU在並行處理大量運算,x86體系僅有的8個通用寄存器遠遠不能滿足需要,在同一時鍾周期中,如果有3個指令發布,你就需要3個輸出寄存器和6個輸入寄存器。我們該怎麼辦呢?聰明的工程師們發現了突破這個限制的方法:「寄存器重命名」。 4.寄存器重命名技術 寄存器重命名,是CPU在解碼過程中對寄存器進行重命名,解碼器把「其它」的寄存器名字變為「通用」的寄存器名字,本質上是通過一個表格把x86寄存器重新映射到其它寄存器,這樣可以讓實際使用到的寄存器遠大於8個。這樣做的好處除了便於前面指令發生意外或分支預測出錯時取消外,還避免了由於兩條指令寫同一個寄存器時的等待。 下面我們以一個超標量CPU執行8個算術指令為例:假設它在每個時鍾周期中能對2個指令解碼,引出計算結果是在指令發布後3個時鍾周期發生的: (1)在第1個時鍾周期,兩個指令發布:它們互不關聯,因此,它們將在3個時鍾周期後(第4個時鍾周期)引出; (2)在第2個時鍾周期,我們首次遇到了「指令依賴」,指令3需要指令2的結果,此時指令3不能開始發布; (3)如果是按序執行,指令4、5、6就不能在指令3前發布。只有在第5個時鍾周期時(指令2的結果已得到)才能發布指令3; (4)在第6個時鍾周期有個大問題:我們想把結果寫到寄存器R1,但這將改變指令5的結果。因此,我們只有在R1空閑時(第10個時鍾周期)才能發布指令6。 按照正常情況處理的話,盡管這個CPU每個時鍾周期可以對2個指令解碼,但它每個時鍾周期的指令執行數只有0.53。如果每次程序所需的寄存器正被使用,我們可以把數據放到其它的寄存器中,在第6個時鍾周期將寄存器R1重命名,指令6和指令8不再耽誤CPU的工作。結果是我們能夠將每個時鍾周期的指令執行數提高50%。寄存器重命名技術可以使x86 CPU的寄存器可以突破8個的限制,達到32個甚至更多。寄存器重命名技術現在已經深深地紮根於超標量CPU中了。5.亂序執行技術 除此之外,處理器工程師還引入了亂序執行技術,從一定程度上來緩解通用寄存器不足的問題。採用亂序執行技術的目的是為了使CPU內部電路滿負荷運轉並相應提高了CPU運行程序的速度。 這好比請A、B、C三個名人為春節聯歡晚會題寫橫幅「春節聯歡晚會」六個大字,每人各寫兩個字,如果這時在一張大紙上按順序由A寫好「春節」後再交給B寫「聯歡」,然後再由C寫「晚會」,那麼這樣在A寫的時候,B和C必須等待,而在B寫的時候C仍然要等待而A已經沒事了。但如果採用三個人分別用三張紙同時寫的做法,那麼B和C都不必等待就可以同時各寫各的了,甚至C和B還可以比A先寫好也沒關系(就像亂序執行),但當他們都寫完後就必須重新在橫幅上按「春節聯歡晚會」的順序排好(自然可以由別人做,就象CPU中亂序執行後的重新排列單元)才能掛出去。 不過,雖然採用寄存器重命名技術、亂序執行技術,但仍不能從根本上解決x86處理器通用寄存器不足的問題。以寄存器重命名技術來說,這種技術的寄存器操作相對於RISC來說,要花費一個時鍾周期來對寄存器進行重命名,這無形中降低了處理器性能以及流水線工作效率,也增加了程序和編譯器的優化難度。針對這個問題,最新的x86-64架構中(K8處理器),AMD在x86架構基礎上將通用寄存器和SIMD寄存器的數量增加了1倍:其中新增了8個通用寄存器以及8個SIMD寄存器作為原有x86處理器寄存器的擴充。 這些通用寄存器都工作在64位模式下,經過64位編碼的程序就可以使用到它們。這些64位寄存器稱為RAX、RBX、RCX、RDX、RDI、RSI、RBP、RSP、RIP以及EFLAGS,在32位環境下並不完全使用到這些寄存器,同時AMD也將原有的EAX等寄存器擴展至64位的RAX,這樣可以增強通用寄存器對位元組的操作能力。從擴充方式上看,EAX等寄存器可以看做是RAX的一個子集,系統仍然可以完整地執行以往的32位編碼程序。增加通用寄存器除了可高效存儲數據外,還可作為定址時的地址指針,從而縮短指令長度和指令執行時間,加快CPU的運算處理速度,同時也給編程帶來方便。 此外,為了保證K8的分支預測更有效率,K8的分支預測寄存器增加到64個。分支指令可以被設為真或假,而每個指令中的6位被分配到單獨一個預測寄存器中,只有預測寄存器被設定為「真」時,那些指向預測寄存器為「真」的指令結果才會被執行。其次由於所有的分支都能並行執行,CPU所花的時間同只執行單個分支的時間是相同的,降低了預測出錯的風險。第三由於CPU不再跳躍執行,它不會把程序代碼分成小塊。也就是說,稍前和稍後的程序代碼可以打包。這樣CPU能夠一並將它們發布,增大並行工作量。從而使性能提高10%~15%,特別是在整數代碼部分。 不過在x86-64中,寄存器的擴展部分似乎僅對於整數、地址數據有效。對浮點和向量數據則仍然保持原樣。我們能從K8向64位的擴展所獲得的好處,只不過是可以在同樣一條指令中,處理更大數值的整數數值以及管理空間更大的內存區域而已。而在32位的情況下,由於通用寄存器只能容納最大32位的數據,因此顯然要花費更多條指令對尺寸超過32位的數據進行處理。這種改進對伺服器、科學計算這樣的領域具有一定的意義,但顯然並不是普通家用環境急需的改進。 可以說,處理器的寄存器對處理器的性能有著巨大的影響。但是無論怎麼發展,通用型CPU目前還沒有脫離x86架構的限制,也許有一天,新的寄存器技術能讓我們的CPU變得更加功能強大!
『叄』 寄存器和此CPU緩存有何區別寄存器有多大容量
寄存器屬於CPU的一個組成部分而緩存只是集成到CPU封裝內完全是和CPU獨立的器件。另外二者速度相差很大,寄存器存取速度最快
其次緩存最後是內存。三張容量上的關系就像飯碗、飯鍋和米缸的關系,容量越大級別越低,速度越慢與CPU的聯系越不密切。寄存器分通用寄存器
標志寄存器
堆棧寄存器等完成CPU的加法運算,緩存是緩沖存儲器,屬於靜態電路存儲器。
對於寄存器的容量:
16位寄存器組
16位CPU所含有的寄存器有
4個數據寄存器(AX、BX、CX和DX)
2個變址和指針寄存器(SI和DI)
2個指針寄存器(SP和BP)
4個段寄存器(ES、CS、SS和DS)
1個指令指針寄存器(IP)
1個標志寄存器(Flags)
32位寄存器組
32位CPU除了包含了先前CPU的所有寄存器,並把通用寄存器、指令指針和標志寄存器從16位擴充成32位之外,還增加了2個16位的段寄存器:FS和GS。
32位CPU所含有的寄存器有
4個數據寄存器(EAX、EBX、ECX和EDX)
2個變址和指針寄存器(ESI和EDI)
2個指針寄存器(ESP和EBP)
6個段寄存器(ES、CS、SS、DS、FS和GS)
1個指令指針寄存器(EIP)
1個標志寄存器(EFlags)
『肆』 海量存儲器、主存儲器以及通用寄存器,這些有什麼區別
海量儲存器用於儲存最近也許不會使用的數據,主儲存器用於儲存即將使用的數據,寄存器用於儲存可立即進行運算的數據。
『伍』 寄存器的分類
eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 匯編語言中CPU上的通用寄存器的名稱,是32位的寄存器。如果用C語言來解釋,可以把這些寄存器當作變數看待。
比方說:add eax,-2 ; //可以認為是給變數eax加上-2這樣的一個值。
這些32位寄存器有多種用途,但每一個都有各自的特別之處。
EAX:累加寄存器,相對於其他寄存器,在運算方面比較常用。
EBX:基地址寄存器,作為內存偏移指針使用。
ECX:計數器,用於特定的技術。
EDX:作為EAX的溢出寄存器,(除法產生的余數)。
EIP:存儲CPU下次所執行的指令地址(存放指令偏移地址)。
ESP:指針的寄存器,用於堆棧操作。被形象地稱為棧頂指針,堆棧的頂部是地址小的區域,壓入堆棧的數據越多,ESP也就越來越小。在32位平台上,ESP每次減少4位元組。
EBP:基址指針,指棧的棧底指針。
它最經常被用作高級語言函數調用的"框架指針"(frame pointer). 在破解的時候,經常可以看見一個標準的函數起始代碼:
push ebp ;保存當前ebp
mov ebp,esp ;EBP設為當前堆棧指針
sub esp, xxx ;預留xxx位元組給函數臨時變數.
...
這樣一來,EBP 構成了該函數的一個框架, 在EBP上方分別是原來的EBP, 返回地址和參數. EBP下方則是臨時變數. 函數返回時作 mov esp,ebp/pop ebp/ret 即可.
ESI:在內存操作指令中作為「源地址指針」使用。
EDI:在內存操作指令中作為「目的地址」使用。
MOV:將源操作數送至目的操作數。
PUSH:入棧指令,將源操作數指定的字數據壓入堆棧棧頂。
POP:出棧操作,將源操作數指定的字數據壓入堆棧棧頂。
JMP:跳轉至指定地址執行。
LEA:取有效地址(偏移地址)至寄存器。
CALL:將程序的執行交給其他代碼段。
RET:子程序的返回指令。