首页 百科知识 段寄存器的引用

段寄存器的引用

时间:2024-12-09 百科知识 版权反馈
【摘要】:当偏移涉及BP寄存器时,缺省引用的段寄存器也为堆栈段寄存器SS。在不改变段寄存器值的情况下,寻址的最大范围是64K字节。若有一个程序,它的代码长度、堆栈长度和数据区长度均不超过64K字节,则可在程序开始时分别给DS和SS等段寄存器赋值,在程序的其他地方就可不再考虑这些段寄存器所含的段值,程序就能正常地运行。由于BIU能根据需要自动选择段寄存器,所以通常情况下在指令中不指明所需要的段寄存器。

1.7.4 段寄存器的引用

由于8086/8088CPU有4个段寄存器,可同时保存4个段值,所以可同时使用4个段,但这4个段有所分工。每当需要产生一个20位的物理地址时,BIU会自动引用一个段寄存器,且左移4位再与一个16位的偏移相加。图1-9给出了一个同时使用4个段的例子。

img22

图1-9 段和段寄存器的引用

在取指令的时候,自动引用代码段寄存器CS,再加上由IP所给出的16位偏移,得到要取指令的物理地址。

但涉及一个堆栈操作时,则自动引用堆栈段寄存器SS,再加上由SP所给出的16位偏移,得到堆栈操作所需的物理地址。当偏移涉及BP寄存器时,缺省引用的段寄存器也为堆栈段寄存器SS。

在存取一个普通存储器操作数时,则自动选择数据段寄存器DS或附加段寄存器ES,再加上16位偏移,得到存储器操作数的物理地址。此时的16位偏移,可以是包含在指令中的直接地址,也可以是某一个16位存储器指针寄存器的值,也可以是指令中的偏移再加上存储器指针寄存器中的值,这取决于指令的寻址方式。除了串操作时目的段选择附加段寄存器ES外,缺省选择数据段寄存器DS。

在不改变段寄存器值的情况下,寻址的最大范围是64K字节。若某个程序使用的总的存储长度(包括代码、堆栈和数据区)不超过64K字节,则整个程序可以合用一个64K字节的段。若有一个程序,它的代码长度、堆栈长度和数据区长度均不超过64K字节,则可在程序开始时分别给DS和SS等段寄存器赋值,在程序的其他地方就可不再考虑这些段寄存器所含的段值,程序就能正常地运行。如果某个程序的数据区长度超过64K字节,那么就要在两个或多个数据段中存取数据。若出现这种情况,只要在从存取一个数据段改变到存取另一个数据段时,改变数据段寄存器内的段值就可以了。

由于BIU能根据需要自动选择段寄存器,所以通常情况下在指令中不指明所需要的段寄存器。取指令和堆栈操作所引用的段寄存器分别规定为CS和SS,是不可变的;串操作中目的段的寄存器规定为ES也是不可变的。但是,在存取一般存储器操作数时,段寄存器可以不一定是DS;当偏移涉及BP寄存器时,段寄存器也不是非要为SS。8086/8088允许使用段超越前缀,改变上述两种情况下所使用的段寄存器,也即用段超越前缀直接明确指定引用的段寄存器。表1-4列出了段寄存器的引用规定,其中“可选用的段寄存器”栏就列出了可作为超越前缀改变的段寄存器,另外,有效地址EA(Effective Address)就是指段内偏移。

表1-4 段寄存器的引用规定

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈