80X86CPU暫存器表

2021-07-02 02:29:44 字數 2903 閱讀 4884



2009-08-04 22:59:17

|  分類:

彙編|  標籤:

資料段、**段、堆疊段、記憶體、堆、堆疊、cpu暫存器|字型大小

訂閱

學習彙編,會有很多類似標題列舉的這些概念,如果對這些概念沒有乙個較清晰的認識,學習起來會相當的吃力。

我也是在大學裡好好學過彙編,畢業後一直沒有摸過,現在,我又把書重新拾起來,再結合我從網上看到得一些文章,這裡來對這些概念總結總結(在這裡沃要說的是,從網上看的資料,一定要轉換成自己的,不能光抄別人的,否則那永遠也不會真正的屬於你)。

下面是我個人對這些概念的理解,如果有不對的地方,希望大家提出指正和批評。

cpu在執行程式的時候,必須有指令和要處理的資料兩部分組成。存放指令的地方,那就是**段,存放資料的地方,就是記憶體(資料段和堆疊段)。為什麼又要將存放資料的地方分為資料段和堆疊段呢?接下來會給出解釋。

我覺得這些資料段、**段、堆疊段都是屬於記憶體的一部分的,比如,我有乙個三室的房子,這個房子就是我們所說的記憶體,而房子的第一間屋子,專門用來存放指令(**段),第二間屋子,專門用來存放資料,而這個屋子有乙個規則,就是只有乙個門,先放進來的資料,放在屋子的最裡面,這樣,你要取資料,只能從離門最近的地方取,也就是先進後出的方式讀取資料(堆疊段)。第三間屋子,又分為2個小室,其中乙個室放最一般的資料(通常所稱的「記憶體」),而另一間室,是專門用來給程式設計師定義使用的空間(堆)。

**段:不用說,很好理解,就是放編譯後的二進位制執行**的地方。

堆:用來放malloc申請記憶體的地方,也用來存放全域性和靜態變數的地方。這裡就不難理解為什麼malloc申請的記憶體,使用完後一定要用free來釋放的原因了,因為如果你不釋放,隨著程式的不斷執行,最後可能把堆的空間給用完了,就是我們通常所說的記憶體洩露,不出問題才怪!!!!!

堆疊:大家都清楚函式吧,函式裡的變數都是在函式結束後就消失的,那麼計算機是怎麼控制的呢?原來是把函式裡的變數,都放在了堆疊裡,函式開始時,堆疊不斷分配空間來存放函式裡的變數值,堆疊指標不段的向上移動,這就是進棧;而當函式結束時,堆疊又不斷的**空間,堆疊指標又不斷的向下移動,很明顯,函式裡的變數在函式結束後,就再也不能使用了。遞迴函式,就是利用了堆疊的先進後出的特性,不斷的呼叫自己,每次都將返回的值壓入堆疊,而每次返回後的自身函式裡,就又正好獲取到這些返回值,周而復始。。。所以,遞迴函式也不能遞迴的層次太深了,否則同樣會出現記憶體溢位的情況!!!

cpu暫存器:cpu暫存器,其實就是來控制**段和資料段的指令及資料讀取的地方,當然,cpu也有自己存放資料的地方,那就是通用暫存器裡的資料暫存器,通常是edx暫存器,c語言裡有個register,就是把資料放在這個暫存器裡,這樣讀取資料就相當的快了,因為不用去記憶體找,就省去了定址和傳送資料的時間開銷。他還有一些暫存器是用來指示當前**段的位置、資料段的位置、堆疊段的位置等等(注意這裡存放的只是相應的**或資料在記憶體中的位址,並不是實際的值,然後根據這個位址,通過位址匯流排和資料匯流排,去記憶體中獲取相應的值),不然在執行**的時候,指令和資料從哪取呢?呵呵。。。他裡面還有標誌暫存器,用來標識一些狀態位,比如標識算術溢位呀等等。。。。。

其實說簡單一點,那就是:cpu+記憶體;cpu負責執行指令,記憶體負責存放指令及指令的資料等等。。。

2009-08-03 22:28:24|  分類: 彙編 |字型大小

訂閱位數

備註

資料暫存器

通用暫存器

31------25

24------16

15------8

7------0

類別:通用暫存器--資料暫存器--累加器

作用:通常用來在運算過程中存放資料。

ahal

axeax

bhbl

類別:通用暫存器--資料暫存器--基址暫存器

作用:通常用來表示記憶體位址。

bxebx

chcl

類別:通用暫存器--資料暫存器--計數暫存器

作用:通常用做計數器,例如:位移指令用cl作為移動次數,迴圈指令用來作為迴圈次數。cxe

dhdl

類別:通用暫存器--資料暫存器--資料暫存器(個人感覺跟eax差不多)

作用:通常用做存放資料,此外,dx也用來存放i/o埠位址。

dxed

變址暫存器

si類別:通用暫存器--變址暫存器--源變址暫存器

作用:在串指令中表示源資料串的位址。

esidi

類別:通用暫存器--變址暫存器--目標變址暫存器

作用:在串指令中表示目的資料串的位址。

edibp

類別:通用暫存器--指標暫存器--基址指標暫存器

作用:存放記憶體位址。(如果位址值存放在該暫存器中時,取資料就應該去記憶體中去取。)

ebp指標暫存器

sp類別:通用暫存器--指標暫存器--堆疊指標暫存器

作用:指示堆疊段中的棧頂位址。通常不用它來做算術運算!(如果位址值存放在該暫存器中時,取資料就應該去堆疊中去取。)

esp專用暫存器

flags

類別:專用暫存器暫存器--標誌暫存器

作用:cpu專用暫存器,不能用作指令的運算元,用來反應指令的執行結果或控制指令的執行方式。

eflags

ip類別:專用暫存器暫存器--指令指標暫存器

作用:cpu專用暫存器,不能用作指令的運算元,cs於eip或ip共同指出要執行的下一條指令的記憶體位址。

eip段暫存器

cs類別:段暫存器暫存器--**段暫存器

作用:存放程式的指令序列。

ds類別:段暫存器暫存器--資料段暫存器

作用:存放程式的資料。

ss類別:段暫存器暫存器--堆疊段暫存器

作用:存放作為堆疊使用的記憶體區域的位址。

es類別:段暫存器暫存器--附加段暫存器

fs類別:段暫存器暫存器--附加段暫存器

gs類別:段暫存器暫存器--附加段暫存器

80X86暫存器組

80x86暫存器組 背景知識 intel cpu的發展史 第一階段 intel cpu,是從最初的4位處理器4004發展到8位處理器8008,再到8位微處理器8080,以及之後的16位微處理器8086 由8086開始,intel 進入了 x86 時代 第二階段 8086與8088的聯絡和區別 int...

80x86 cpu的保護模式

轉貼 80x86 cpu的保護模式 對於學習任何程式語言的朋友來說掌握cpu的操作模式都是一件非常重要的事,其中就數保護模式這部分最重要了,現在關於保護模式的中文資料就只有楊季文先生那一家還算全面,但有些人還是覺得看不太懂,為此我就寫了這篇文章,看看是否對您的胃口!一 保護模式概述 顧名思義,就是對...

x86 CPU的MSR暫存器

msr model specific register 是x86架構中的概念,指的是在x86架構處理器中,一系列用於控制cpu執行 功能開關 除錯 跟蹤程式執行 監測cpu效能等方面的暫存器。msr暫存器的雛形開始於intel 80386和80486處理器,到intel pentium處理器的時候,...