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