1普气、數(shù)據(jù)寄存器
ax谜疤、bx、cx现诀、dx
4個(gè)16位寄存器又可分割成8個(gè)獨(dú)立的8位寄存器(AX:AH-AL夷磕、BX:BH-BL、CX:CH-CL仔沿、DX:DH-DL)坐桩,每個(gè)寄存器都有自己的名稱,可獨(dú)立存取封锉。程序員可利用數(shù)據(jù)寄存器的這種”可分可合”的特性绵跷,靈活地處理字/字節(jié)的信息。
寄存器AX和AL通常稱為累加器(Accumulator)成福,用累加器進(jìn)行的操作可能需要更少時(shí)間碾局。累加器可用于乘、 除奴艾、輸入/輸出等操作净当,它們的使用頻率很高; 寄存器BX稱為基地址寄存器(Base Register)蕴潦。它可作為存儲(chǔ)器指針來使用像啼; 寄存器CX稱為計(jì)數(shù)寄存器(Count Register)。在循環(huán)和字符串操作時(shí)潭苞,要用它來控制循環(huán)次數(shù)忽冻;在位操作 中,當(dāng)移多位時(shí)此疹,要用CL來指明移位的位數(shù)僧诚;
寄存器DX稱為數(shù)據(jù)寄存器(Data Register)蜜猾。在進(jìn)行乘、除運(yùn)算時(shí)振诬,它可作為默認(rèn)的操作數(shù)參與運(yùn)算蹭睡,也 可用于存放I/O的端口地址。在16位CPU中赶么,AX肩豁、BX、CX和DX不能作為基址和變址寄存器來存放存儲(chǔ)單元的地址辫呻,但在32位CPU中清钥,其32位寄存器EAX、EBX放闺、ECX和EDX不僅可傳送數(shù)據(jù)祟昭、暫存數(shù)據(jù)保存算術(shù)邏輯運(yùn)算結(jié)果,而且也可作為指針寄存器怖侦,所以篡悟,這些32位寄存器更具有通用性。
2匾寝、變址寄存器
32位CPU有2個(gè)32位通用寄存器ESI和EDI搬葬。其低16位對(duì)應(yīng)先前CPU中的SI和DI,對(duì)低16位數(shù)據(jù)的存取艳悔,不影響高16位的數(shù)據(jù)急凰。
寄存器ESI、EDI猜年、SI和DI稱為變址寄存器(Index Register)抡锈,它們主要用于存放存儲(chǔ)單元在段內(nèi)的偏移量,用它們可實(shí)現(xiàn)多種存儲(chǔ)器操作數(shù)的尋址方式乔外,為以不同的地址形式訪問存儲(chǔ)單元提供方便床三。變址寄存器不可分割成8位寄存器。作為通用寄存器袁稽,也可存儲(chǔ)算術(shù)邏輯運(yùn)算的操作數(shù)和運(yùn)算結(jié)果勿璃。它們可作一般的存儲(chǔ)器指針使用。在字符串操作指令的執(zhí)行過程中推汽,對(duì)它們有特定的要求补疑,而且還具有特殊的功能。
3歹撒、指針寄存器
32位CPU有2個(gè)32位通用寄存器EBP和ESP莲组。其低16位對(duì)應(yīng)先前CPU中的SBP和SP,對(duì)低16位數(shù)據(jù)的存取暖夭,不影響高16位的數(shù)據(jù)锹杈。
寄存器EBP撵孤、ESP、BP和SP稱為指針寄存器(Pointer Register)竭望,主要用于存放堆棧內(nèi)存儲(chǔ)單元的偏移量邪码,用它們可實(shí)現(xiàn)多種存儲(chǔ)器操作數(shù)的尋址方式,為以不同的地址形式訪問存儲(chǔ)單元提供方便咬清。指針寄存器不可分割成8位寄存器闭专。作為通用寄存器,也可存儲(chǔ)算術(shù)邏輯運(yùn)算的操作數(shù)和運(yùn)算結(jié)果旧烧。
它們主要用于訪問堆棧內(nèi)的存儲(chǔ)單元影钉,并且規(guī)定:
BP為基指針(Base Pointer)寄存器,用它可直接存取堆棧中的數(shù)據(jù)掘剪;
SP為堆棧指針(Stack Pointer)寄存器平委,用它只可訪問棧頂。
4夺谁、段寄存器
段寄存器是根據(jù)內(nèi)存分段的管理模式而設(shè)置的廉赔。內(nèi)存單元的物理地址由段寄存器的值和一個(gè)偏移量組合而成
的,這樣可用兩個(gè)較少位數(shù)的值組合成一個(gè)可訪問較大物理空間的內(nèi)存地址予权。
CPU內(nèi)部的段寄存器:
CS——代碼段寄存器(Code Segment Register)昂勉,其值為代碼段的段值;
DS——數(shù)據(jù)段寄存器(Data Segment Register)扫腺,其值為數(shù)據(jù)段的段值;
ES——附加段寄存器(Extra Segment Register)村象,其值為附加數(shù)據(jù)段的段值笆环;
SS——堆棧段寄存器(Stack Segment Register),其值為堆棧段的段值厚者;
FS——附加段寄存器(Extra Segment Register)躁劣,其值為附加數(shù)據(jù)段的段值;
GS——附加段寄存器(Extra Segment Register)库菲,其值為附加數(shù)據(jù)段的段值账忘。
在16位CPU系統(tǒng)中,它只有4個(gè)段寄存器熙宇,所以鳖擒,程序在任何時(shí)刻至多有4個(gè)正在使用的段可直接訪問;在32位微機(jī)系統(tǒng)中烫止,它有6個(gè)段寄存器蒋荚,所以,在此環(huán)境下開發(fā)的程序最多可同時(shí)訪問6個(gè)段馆蠕。32位CPU有兩個(gè)不同的工作方式:實(shí)方式和保護(hù)方式期升。在每種方式下惊奇,段寄存器的作用是不同的。有關(guān)規(guī)定簡單描述如下:
實(shí)方式: 前4個(gè)段寄存器CS播赁、DS颂郎、ES和SS與先前CPU中的所對(duì)應(yīng)的段寄存器的含義完全一致,內(nèi)存單元的邏輯地址仍為”段值:偏移量”的形式容为。為訪問某內(nèi)存段內(nèi)的數(shù)據(jù)祖秒,必須使用該段寄存器和存儲(chǔ)單元的偏移量。
保護(hù)方式: 在此方式下舟奠,情況要復(fù)雜得多竭缝,裝入段寄存器的不再是段值,而是稱為”選擇子”(Selector)的某個(gè)值沼瘫。
5抬纸、指令指針寄存器
32位CPU把指令指針擴(kuò)展到32位,并記作EIP耿戚,EIP的低16位與先前CPU中的IP作用相同湿故。
指令指針EIP、IP(Instruction Pointer)是存放下次將要執(zhí)行的指令在代碼段的偏移量膜蛔。在具有預(yù)取指令功能的系統(tǒng)中坛猪,下次要執(zhí)行的指令通常已被預(yù)取到指令隊(duì)列中,除非發(fā)生轉(zhuǎn)移情況皂股。所以墅茉,在理解它們的功能時(shí),不考慮存在指令隊(duì)列的情況呜呐。
在實(shí)方式下就斤,由于每個(gè)段的最大范圍為64K,所以蘑辑,EIP中的高16位肯定都為0洋机,此時(shí),相當(dāng)于只用其低16位的IP來反映程序中指令的執(zhí)行次序洋魂。