首页 > 代码库 > 段寄存器(8086CPU)和代码段

段寄存器(8086CPU)和代码段

1.段寄存器

8086CPU有4个段寄存器:CS、DS、SS、ES。当8086CPU访问内存时,由这4个段寄存器提供内存单元的段地址。


CS和IP是8086中最关键的寄存器,他们指示了CPU当前要读取指令的地址。CS是代码段寄存器,IP为指令指针寄存器。在8086PC机中,任意时刻,设CS中的内容是M,IP中的内容是N,8086CPU将从内存地址:M*16+N处读取指令并执行。也可以这样表述,8086机中,任意时候,CPU将CS:IP指向的内容当做指令执行,。CPU将CS、IP中的内容当做指令的段地址和偏移地址,用他们合成物理地址。


2.更改CS:IP的值

mov指令没法完成这个任务,8086CPU为CS:IP提供了另外的指令来改变他们的值:转移指令

比如,想同时修改CS:IP的内容:jmp 段地址:偏移地址。jmp 2AE3:3。功能:用指令中的段地址修改CP,偏移地址修改IP。


想修改IP的内容,可用指令“jmp 寄存器”来完成,jmp ax功能类似mov IP,ax.

jmp ax指令执行前:ax=1000H,CS=2000H,IP=0003H

指令执行后:ax=1000H,CS=2000H,IP=1000H


3.代码段

对于8086PC机,在编程时,可以根据需要,将一组内存单元定义为一个段。

可以将长度为N(N<64)的一组代码,存在一组连续地址、起始地址为16的倍数的内存单元中,这段内存是用来存放代码的,从而定义一个代码段。

将一段内存当做代码段,仅仅是我们编程时的一种安排,CPU并不会由于这种安排就自动地将我们定义得代码段中的指令当做指令执行。

CPU只认被CS:IP指向的内存单元中的内容为指令