段寄存器是因為對內(nèi)存的分段管理而設置的。16位CPU有四個段寄存器,所以,其程序可同時訪問四個不同含義的段。段寄存器及其偏移量的引用關系如圖所示。
段寄存器CS指向存放程序的內(nèi)存段,IP是用來存放下條待執(zhí)行的指令在該段的偏移量,把它們合在一起可在該內(nèi)存段內(nèi)取到下次要執(zhí)行的指令。
段寄存器SS指向用于堆棧的內(nèi)存段,SP是用來指向該堆棧的棧頂,把它們合在一起可訪問棧頂單元。另外,當偏移量用到了指針寄存器BP,則其缺省的段寄存器也是SS,并且用BP可訪問整個堆棧,不僅僅是只訪問棧頂。
段寄存器DS指向數(shù)據(jù)段,ES指向附加段,在存取操作數(shù)時,二者之一和一個偏移量合并就可得到存儲單元的物理地址。該偏移量可以是具體數(shù)值、符號地址和指針寄存器的值等之一,具體情況將由指令的尋址方式來決定。
通常,缺省的數(shù)據(jù)段寄存器是DS,只有一個例外,即:在進行串操作時,其目的地址的段寄存器規(guī)定為ES。當然,在一般指令中,我們還可以用強置前綴的方法來改變操作數(shù)的段寄存器
一般情況下,段寄存器及其指針寄存器的引用關系如下表所示。表中的“可選用的段寄存器”即是可以用強置說明這些段寄存器的值來作為其操作數(shù)地址的段地址。
由上表可以看出16位CPU在段寄存器的引用方面有如下規(guī)定:
取指令所用的段寄存器和偏移量一定是用CS和IP;
堆棧操作所用的段寄存器和偏移量一定是SS和SP;
串操作的目標操作數(shù)所用的段寄存器和偏移量一定是ES和DI;
其它情況,段寄存器除了其默認引用的寄存器外,還可以強行改變?yōu)槠渌渭拇嫫鳌?/p>