2.3 通用寄存器上
本節必須掌握的知識點:
u 8位、16位、32位通用寄存器
u 寄存器邏輯結構圖
u 寄存器的編號、順序、及能存儲數據的最大值
計算機存儲數據的地方有三個:處理器(CPU)、內存和硬盤。處理器的讀寫速度比內存快,內存的讀寫速度高於硬盤。寄存器就是處理器中用來存儲數據的地方,寄存器的讀寫速度要高於內存。那麼寄存器有多大,取決於計算機的位數,在32位計算機裡最大寬度為32位,在64位計算機裡最大寬度為64位。32位和64位CPU提供的所有寬度如下:
·32位處理器:8位 16位 32位
·64位處理器:8位 16位 32位 64位
2.3.1【32位通用寄存器】
32位處理器中:EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI這8個寄存器通常存放一般性的數據,被稱為通用寄存器。它們都有各自的用途。【本節不做詳細介紹,用到時會詳細介紹】
EAX、ECX、EDX、EBX為數據寄存器;
ESP、EBP為指針寄存器;
ESI、EDI變址寄存器。
每個寄存器都有自己的邏輯結構,接下來看一下它們的邏輯結構是什麼樣的。
2.3.2【寄存器邏輯結構】
以EAX為例,寄存器的邏輯結構圖如圖2-3-1所示。
EAX寄存器它本身是一個32位寄存器,那麼它可以存儲一個32位的數據。EAX寄存器是在32位處理器中工作的,它的上一代處理器是16位處理器,而16位處理器的上一代是8位處理器,為了保證兼容,使之前的處理器經過程序的修改可以在32位處理器上運行。使得EAX寄存器包含了16位、8位的寄存器。
EAX寄存器可分為一個可獨立使用的16位寄存器:AX(16位);16位寄存器還可以分為兩個可以獨立使用的8位寄存器: AH(8位~15位為高8位)、AL(0位~7位為低8位)。
同理可得出ECX 、EDX、 EBX。
·ECX可分為:CX、CH、CL;
·EDX可分為:DX、DH、DL;
·EBX可分為:BX、BH、BL。
而ESP、EBP、ESI、EDI這四個寄存器是分成了兩段。
以ESP為例,寄存器的邏輯結構圖如圖2-3-2所示。
同理可得出EBP、ESI、EDI。
·EBP可分為:SP;
·ESI 可分為:SI;
·EDI可分為:DI。
舉例介紹了個別的寄存器邏輯結構,接下來我們來畫出32位、16位、8位的通用寄存器邏輯結構圖。
2.3.3【通用寄存器邏輯結構圖】
通用寄存器邏輯結構必須記住,對以後學習有幫助,如圖2-3-3所示
從圖2-3-3可以看出,這些寄存器排列是有順序的,都是在0~31位之間,接下來我們來簡單介紹他們各自存在的順序和編號。切記它們的編號和順序不能錯,就像你的身份證號碼,是唯一的。
2.3.4【寄存器有自己的編號】
32位寄存器有自己的編號,16位寄存器也有屬於自己的獨立的編號,同樣8位寄存器也有屬於自己的編號。當然,他們是重疊的,當改變了32位的寄存器,相應的16位寄存器也會跟著改變。切記它們的順序不能記錯。
以通用寄存器為例,展示寄存器的編號,如圖2-3-4所示。
根據圖2-3-4簡單說明一下,32位的寄存器有8個:EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI,每個寄存器都對應一個編號:0號,1號,2號,3號……還有16位的寄存器:AX,CX,DX,BX,SP,BP,SI,DI。對應的編號:0號,1號,2號,3號……同樣8位的寄存器:AL,CL,DL,BL,AH,CH,DH,BH。對應的編號:0號,1號,2號,3號……。
我們知道了通用寄存器有順序有編號,那麼它們有各自的名稱及用途嗎?
2.3.5【32位通用寄存器的指定名稱及用途】
·EAX:累加器(Accumulator),操作數和結果數據累加器;
·ECX:計數(Counter),字符串和循環操作的計數器;
·EDX:用於保存乘法形成的部分結果或者除法之前部分被除數;
·EBX:基地址(Base), DS段的數據指針,在內存尋址時存放基地址;
·ESP:堆棧(Stack)指針,被形象地稱為棧頂指針;
·EBP:基址指針(BASE POINTER), SS段的數據指針;
·ESI:字符串操作的源(Source)指針,SS段的數據指針;
·EDI:字符串操作的目標(Destination)指針,ES段的數據指針.
【本節只是簡單的描述,詳細知識請參考Intel白皮書】
我們知道了通用寄存器有順序有編號有名字有用途,那麼它們有多大哪?
2.3.6【寄存器能存儲數據的最大值】
·8位寄存器能存儲數據的最大值為28;
·16位寄存器能存儲數據的最大值為216;
·32位寄存器能存儲數據的最大值為232。
總結:本節需要掌握的內容比較多希望大家能記住,對以後學習有幫助。
u下一節介紹通用寄存器下。
練習:
1、自己在紙上能夠按順序寫出8位、16位、32位通用寄存。
2、自己在紙上畫一遍8位、16位、32位通用寄存器邏輯圖並熟練寫出它們對應的編號。
閱讀更多 愛達人編程達人 的文章