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