2、資料暫存器
3、變址暫存器
4、指標暫存器
5、段暫存器
6、指令指標暫存器
7、標誌暫存器:eflag
7.2、狀態控制標誌位
7.3、32位cpu新增的標誌位
4個資料暫存器(eax、ebx、ecx和edx)
2個變址和指標暫存器(esi和edi)
2個指標暫存器(esp和ebp)
6個段暫存器(es、cs、ss、ds、fs和gs)
1個指令指標暫存器(eip)
1個標誌暫存器(eflags)
通常稱為累加器(accumulator),用累加器進行的操作可能需要更少時間。可用於乘、 除、輸入/輸出等操作,使用頻率很高;
稱為基位址暫存器(base register)。它可作為儲存器指標來使用;
稱為計數暫存器(count register)。 在迴圈和字串操作時,要用它來控制迴圈次數;在位操作中,當移多位時,要用cl來指明移位的位數;
稱為資料暫存器(data register)。在進行乘、除運算時,它可作為預設的運算元參與運算,也可用於存放i/o的埠位址。
暫存器esi、edi、si和di稱為變址暫存器(index register)。它們主要用於存放儲存單元在段內的偏移量, 它們可作一般的儲存器指標使用。
32位cpu有2個32位通用暫存器ebp和esp。
它們主要用於訪問堆疊內的儲存單元,並且規定:
intel處理器中的段暫存器,用於支援處理器的段式儲存器管理機制。16位的8086/intel286處理器有4個段暫存器cs/ds/ss/es。32位的處理器執行在保護模式下時,除了先前的4個段暫存器,還引入了兩個新的段暫存器fs/gs,這些暫存器都是16位元位寬。
ia-32處理器中的段暫存器(cs/ds/es/ss/fs/gs)用於儲存16位寬的段選擇符(segment selector)。要訪問儲存器中的特定段,對應的段選擇符必須要載入到正確的段暫存器中。
每個段暫存器都關聯下列三種儲存型別(即段型別)之一:**段,資料段,棧段。ds/es/fs/gs這四個暫存器指向四個資料段。
稱為**段暫存器(code segment)。,對應於記憶體中的存放**的記憶體區域,用來存放記憶體**段區域的入口位址(段基址)。在cpu執行指令時,通過**段暫存器(cs,code segment)和指令指標暫存器(ip,instruction pointer)來確定要執行的下一條指令的記憶體位址。
稱為資料段暫存器(data segment)。指向資料段,在訪問運算元時,二者之一和乙個偏移量合併就可得到儲存單元的實體地址。該偏移量可以是具體數值、符號位址和指標暫存器的值等之一,具體情況將由指令的定址方式來決定。
稱為附加資料段暫存器(extra segment)。和ds類似,指向資料段。該段是串操作指令中目的串所在的段。
稱為棧段暫存器(stack segment)。用於堆疊的記憶體段,sp是用來指向該堆疊的棧頂,把它們合在一起可訪問棧頂單元。另外,當偏移量用到了指標暫存器bp,則其預設的段暫存器也是ss,並且用bp可訪問整個堆疊,不僅僅是只訪問棧頂。
稱為附加資料段暫存器(extra segment)。fs暫存器指向當前活動執行緒的teb結構(執行緒結構)。
稱為附加資料段暫存器(extra segment)。
暫存器32位cpu把指令指標擴充套件到32位,並記作eip,eip的低16位與先前cpu中的ip作用相同。 指令指標eip、ip(instruction pointer)是存放下次將要執行的指令在**段的偏移量。在具有預取指令功能的系統中,下次要執行的指令通常已被預取到指令佇列中,除非發生轉移情況。fs
和gs
是段暫存器。它們沒有處理器定義的目的,而是由作業系統執行它們來賦予目的。在windows 64位中,該gs
暫存器用於指向作業系統定義的結構。fs
並且gs
通常被os核心用於訪問特定於執行緒的記憶體。在windows中,該gs
暫存器用於管理執行緒特定的記憶體。linux核心用於gs
訪問cpu特定的記憶體。在windows上,fs確實是用於執行緒特定的儲存。
不只是在windows上。gs還用於os x上的tls。64位核心還使用gs來在上下文切換期間跟蹤系統結構。作業系統將使用swapgs達到此目的。
cf稱為進製標誌位(carry flag)。用於反映運算是否產生進製或借位。如果運算結果的最高位產生了乙個進製或借位,則其值為1,否則為0。
of稱為溢位標誌位(overflow flag)。用於反映有符號數加減運算所得結果是否溢位。如果運算結果超過當前運算位數所能表示的範圍,則稱為溢位,of的值為1,否則為0。
sf稱為符號標誌位(sign flag)。用於反映運算結果的符號位,它與運算結果的最高位相同。在微機系統中,有符號數採用補碼表示法,所以sf也就反映運算結果的正負號。運算結果為正數時,sf的值為0,否則為1。
zf稱為零標誌位位(zero flag)。用於反映運算結果是否為0.如果運算結果為0,則其值為1,否則為0。
af稱為輔助進製標誌位(auxiliary flag)。在發生下列情況時,af標誌被置為1,否則為0:
在字操作時,發生低位元組向高位元組進製或借位時;
在位元組操作時,發生低4位向高4位進製或借位時; pf
稱為奇偶標誌位(parity flag)。用於反映運算結果的奇偶性。如果運算結果的二進位制表示中"1"的個數為偶數,則pf為1,否則為0。
tf稱為追蹤標誌位(trap flag)。當tf置為1時,cpu進入單步執行方式,即每執行一條指令,產生乙個單步中斷請求。這種方式主要用於程式的除錯。
指令系統中沒有專門的指令來改變tf的值,但程式設計師可用其它辦法來改變其值。
if稱為中斷允許標誌位(interrupt-enable flag)。用來決定cpu是否響應cpu外部的可遮蔽中斷發出的中斷請求。但不管該標誌為何值,cpu都必須響應cpu外部的不可遮蔽中斷所發出的中斷請求,以及cpu內部產生的中斷請求。具體規定如下:
當if=1時,cpu可以響應cpu外部的可遮蔽中斷發出的中斷請求;
當if為0時,cpu不響應cpu外部的可遮蔽中斷發出的中斷請求;
cpu的指令系統中也有專門的指令來改變標誌位if的值。
df稱為方向標誌位(direction flag)。用來決定在串操作指令(rep,movsb,movsw)執行時有關指標暫存器發生調整的方向。
cld指令:將標誌暫存器的 df 位置為0。
std指令:將標誌暫存器的 df 位置為1。
iopl
稱為i/o特權標誌位(i/o privilege level)。iopl用2個bit來表示,也稱為i/o特權字段,表示要求執行i/o指令的特權級。如果當前的特權級在數值上小於等於iopl的值,那麼該i/o指令可執行,否則將發生乙個保護異常。
nt稱為巢狀任務標誌位(nested task)。用來控制中斷返回指令iret的執行。具體規定如下:
當nt=0,用堆疊中儲存的值恢復eflags、cs和eip,執行常規的中斷和返回操作;
當nt=1,通過任務轉換實現中斷返回; rf
稱為重啟動標誌位(restart flag)。用來控制是否接受除錯故障。規定:rf=0時,表示"接受"除錯故障,否則拒絕。在成功執行完一條指令後,處理機把rf置為0,當接收到乙個非除錯故障時,處理機將它置為1。
虛擬8086方式標誌位
如果該標誌的值為1,則表示處理機處於虛擬的8086方式下的工作狀態,否則處於一般保護方式下的工作狀態。
IA 32位暫存器基礎
eax ax ah al累加器,低十六位可以用作十六位累加器,低十六位還可以分為兩個八位暫存器。ebx ds段的資料指標 基址暫存器。和eax類似。ecx 字串和迴圈操作的 計數器。和eax類似 edx i o指標 資料計數器。和eax類似。add sub xor or指令可以應用於這四個暫存器。用...
暫存器知識
一般暫存器 ax bx cx dx ax 累積暫存器,bx 基底暫存器,cx 計數暫存器,dx 資料暫存器 索引暫存器 si di si 索引暫存器,di 目的索引暫存器 堆疊 基底暫存器 sp bp sp 堆疊指標暫存器,bp 基底指標暫存器 eax ecx edx ebx 為ax,bx,cx,d...
32位機,CPU是如何利用段暫存器定址的
32位cpu 位址線擴充套件成了32位,這和資料線的寬度是一致的。因此,在32位機裡其實並不需要採用 實體地址 段 偏移 這種位址表達方式。原來在16位機裡規定的每乙個段不大於64kb在32位機裡也不是必要的。所以,對於32位機來講,最簡單的方法就是用乙個32位數來標識乙個位元組的儲存位址,定址時只...