(二)CS(段寄存器)和 IP(指令指针寄存器)--汇编笔记

汇编语言

Posted by YiMiTuMi on March 11, 2020

段的概念

内存并没有分段,段的划分来自于CPU。

段地址*16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB。

CPU可以用不同的段地址和偏移地址形成同一个物理地址。

CS(段寄存器)和IP(指令指针寄存器)

CS:代码段寄存器

IP:指令指针寄存器

在8086PC中,任意时刻设CS中的内容为M,IP中的内容为N,8086PC将从内存M*16+N单元开始,读取一条指令并执行。即:CPU将CS:IP指向的内容当作指令执行。

读取一条指令后,IP中的值自动增加,以使CPU可以读取下一条指令,根据指令的长度增加。

8086CPU的工作原理:

  1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器。

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

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

CPU将CS:IP指向的内存单元中的内容看作指令,因为,在任何时候,CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码,执行。

修改CS、IP的指令

mov指令被称为传送指令。

mov指令不能用于设置CS、IP的值。

修改CS、IP的内容的指令被统称为转移指令。jmp指令。

jmp格式:(当前格式只能在Debug中使用,汇编编译器无法识别)

  jmp  段地址 : 偏移地址

  jmp  2AE3:3

  执行:CS = 2AE3H, IP = 0003H, CPU将从2AE33H处读取命令。

  jmp  段地址:偏移地址

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

仅修改IP格式:

jmp  某以合法寄存器(汇编编译器也可使用)

jmp ax,执行前 ax = 1000H CS = 2000H IP = 0003H
        执行后 ax = 1000H CS = 2000H IP = 1000H

jmp  某以合法寄存器

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

代码段

要让CPU执行我们的放在代码段中的指令,必须要将CS:IP指向所定义的代码段中的第一条指令的首地址。

注意:指令的机器码读入的时候,此时指令还没执行,但是IP的值已经指向下一条指令的地址了。即:读取指令 -> IP地址指向下一条指令 -> CPU执行读取的指令

黄蔷薇 – 永恒的微笑