8086CPU中段寄存器是内存管理中重要的组成部分,常用的段寄存器组成有:
(1)数据段寄存器(DS, Data Segment)
(2)代码段寄存器(CS, Code, Segment)、指令指针寄存器(IP,Instruction Pointer )
(3)栈段寄存器(SS, Stack Segment)、栈指针寄存器(SP, Stack Pointer)
在内存管理中,我们可以将一段内存定义为一个段,用一个段地址指示段,用偏移地址访问段内的单元,这取决于我们对CPU的安排,即
段地址 * (CPU位数) + 偏移地址 = 物理地址
我们可以用一个段存放数据,将它定义为“数据段”;
我们可以用一个段存放代码,将它定义为“代码段”;
我们可以用一个段当做栈,将它定义为“栈段”。
我们可以这样安排,但若要让CPU按照我们的安排访问这些段,就要:
1、对于数据段,将它的段地址放在DS中,用mov, add, sub等访问内存单元的指令时,CPU就将我们的定义的数据段中的内容用当作数据来访问。
2、对于代码段,将它的段地址放在CS中,将段中的第一条指令的偏移位置放在IP中,这样CPU就将执行我们定义的代码段中的指令。
3、对于栈段,将它段地址放在SS中,将栈顶单元的偏移地址放在SP中,这样CPU在需要进行栈操作的时候,比如执行push, pop指令等,就将我们定义的栈段当做栈空间来使用。
可见,不管我们怎么安排,CPU将内存中的某段内容当做代码,是因CS: IP指向了那里,CPU将某段内存当做栈,是因为SS: SP指向了那里。我们一定要清楚,什么是我们的安排,以及如何让CPU按照我们的安排行事。要非常清楚CPU的工作原理,才能在控制CPU按照我们的安排运行的时候做到游刃有余。
比如我们将10000H ~ 1001FH安排为代码段,并在里面存储如下代码:
mov ax

本文详细介绍了8086CPU中的段寄存器,包括DS、CS、SS和SP的作用,以及如何通过它们进行内存管理和指令执行。文章还解释了8086的16位寻址模式,探讨了段地址和偏移地址结合形成物理地址的设计原理,并通过实例说明了这种设计的优势。
8248

被折叠的 条评论
为什么被折叠?



