寄存器基础知识四之段寄存器

段寄存器

段寄存器就是提供段地址的。

8086CPU有4个段寄存器:CS、DS、SS、ES

当8086CPU要访问内存时,由这4个段寄存器提供内存单元的段地址。

CS和IP

CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。

CS为代码段寄存器;

IP为指令指针寄存器存放偏移地址。

8086PC读取和执行指令相关部件


寄存器基础知识四之段寄存器_第1张图片
8086PC读取和执行

8086PC工作过程的简要描述

从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器,然后执行;

IP = IP + 所读取指令的长度,从而指向下一条指令;

执行指令。 转到步骤 (1),重复这个过程。


修改CS、IP的指令

CPU从何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。

mov指令不能用于设置CS、IP的值,8086CPU没有提供这样的功能。

8086CPU为CS、IP提供了另外的指令来改变它们的值:转移指令

同时修改CS、IP的内容:

jmp 段地址:偏移地址

如:jmp 2AE3:3

jmp 3:0B16

功能:用指令中给出的段地址修改CS,偏移地址修改IP。


仅修改IP的内容:

jmp 某一合法寄存器

如:jmp ax (类似于 mov IP,ax)

jmp bx

功能:用寄存器中的值修改IP。

代码分析:

(初始:CS=2000H,IP=0000H)

寄存器基础知识四之段寄存器_第2张图片

解析:根据物理地址=基址*16+偏移地址 得到程序的执行地址为:20000H

1.则执行的第一条指令为:mov ax,6622

2.jmp 1000:3   此时物理地址为:10003H

3.则执行的指令为:mov ax ,0000

4.mov bx,ax

5.jmp bx ip寄存器被修改为0000 那么此时物理地址为 10000H

6.mov ax ,0123

7.转到第三步执行。。。。

代码段

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

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

寄存器基础知识四之段寄存器_第3张图片

这段长度为 10 字节的字节的指令,存在从123B0H~123B9H的一组内存单元中,我们就可以认为,123B0H~123B9H这段内存单元是用来存放代码的 ,是一个代码段 ,它的段地址为123BH,长度为10字节。

你可能感兴趣的:(寄存器基础知识四之段寄存器)