暫存器是cpu的組成部件之一,cpu在進行計算時,因為速度太快的原因,無法與記憶體(dram)直接進行操作。所以需要將所需的資料先從記憶體中提取到暫存器中,在對暫存器進行操作。
為了緩解dram與cpu的速度差,計算機在cpu與dram之間還有乙個cache元件(sram),從記憶體中取出資料到暫存器中需要乙個cpu指令週期,但如果預先放在cache中的話便可以直接使用,大大節約了取到資料的時間。
從8086這一代cpu開始,intel進入了x86時代,由於最早出現的8086是16位的cpu,暫存器能儲存的位數也為16位,例如我們熟悉的ax,bx,cx,dx暫存器。
從i386這一代cpu開始,32位處理器開始進入市場,這個時候暫存器也公升至32位,除了包含先前16位所有的暫存器外,還把通用暫存器、指令暫存器和標誌暫存器從16位擴充成32位,並增加了2個16位段暫存器fs和gs。
之後的64位x86-64也是對x86架構的擴充套件。
這裡以32位cpu的暫存器為例
在32位cpu中有:
1. 資料暫存器
主要用於儲存運算元和運算結果等資訊。
eax – 通常稱為累加器(accumulator),可用於乘、除、輸入/輸出等操作,使用頻率很高。
ebx – 基位址暫存器(base register),可用於儲存器指標來使用。
ecx – 計數暫存器(count register),在迴圈或者字元操作時,用於控制迴圈次數。
edx – 資料暫存器(data register),在進行乘、除運算時,它可作為預設的運算元參與運算,也可以用於存放i/o的埠位址。
2. 變址暫存器
esi和edi被稱為變址暫存器(index register),用於存放儲存單元在段中的偏移量,可以用來實現多種儲存器運算元的定址方式,為以不同的位址訪問儲存單元提供方便。
3. 指標暫存器
ebp和esp被成為指標暫存器(pointer register),用於存放堆疊記憶體儲存單元的偏移量。
其中,bp被稱為(base pointer)基位址暫存器,用它可以直接訪問堆疊中的資料。
sp被稱為(stack pointer)堆疊指標暫存器,用它只能訪問棧頂。
4. 段暫存器
根據記憶體分段的管理模式而設定的暫存器。最終實體地址是由段暫存器的值+偏移量組合而成,這樣做的優點是能將兩個較少位數的值組合成乙個可以訪問的較大物理空間的記憶體位址。
段暫存器介紹:
cs – **段暫存器(code segment), 用於儲存**段的段值。
ds – 資料段暫存器(data segment),用於儲存資料段的段值。
ss – 堆疊段暫存器(stack segment),用於儲存堆疊段的段值。
es、fs、gs – 附加段暫存器(extra segment),用於儲存附加段的段值。
5. 指令指標暫存器
eip – 指令指標暫存器(instruction pointer),用於存放下次要執行的指令在**段的偏移量。在馮·諾依曼所建立的「儲存程式」概念下的產物。
6. 標誌暫存器
暫存器(通用暫存器)
因為學習使用的是王爽的 組合語言 第3版 因此也只能提到8086cpo的暫存器。對於其他而言,原理都是相通的。對於8086暫存器,有14個暫存器,主要是 ax bx cx dx si di sp bp ip cs ss ds es psw。一 通用暫存器 8086的通用暫存器有ax bx cx dx...
暫存器,標誌暫存器
涉及硬體傳輸資料的,往往包含以下內容 1.資料傳輸引腳 資料放 2.控制引腳 怎麼控制 3.狀態引腳 結果如何 暫存器相當於cpu內部的儲存單元,可能是連續排列,相當於 c語言中的陣列。一 8個通用暫存器 16 bit accumulate axah alr0 count cxch clr1 dat...
CS 暫存器 和 IP 暫存器
下面將要介紹的是一組非常非常重要的暫存器,即 cs ip cs ip 兩個暫存器指示了 cpu 當前將要讀取的指令的位址,其中cs 為 段暫存器,而ip 為指令指標暫存器。什麼叫做指示了 cpu 當前將要讀取的指令呢?在 8086 cpu 中,為什麼 cpu 會自動的執行指令呢?這些指令肯定是存放在...