汇编:02---CS段寄存器、IP寄存器与jmp指令

一、段寄存器

1.概念

  • CPU在访问内存单元时需要相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。其中提供段地址的是段寄存器

2.段寄存器

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

3.改变段寄存器的值

  • CS寄存器:不能直接使用mov指令设置CS的值,可以使用jmp指令改变

本片文章只介绍CS段寄存器

二、CPU如何读写内存数据(物理地址)

  • 物理地址:CPU读写内存数据,需要内存提供一个物理地址,然后CPU根据这个物理地址指定位置读写数据

公式

  • 物理地址=段地址*16+偏移地址

三、段地址与偏移地址

  • 段地址:存放指令的段地址。是CPU读写内存时,内存数据的第一个地址(是所要处理的内存中的数据的第一个地址),并且这个在一次完整的处理流程中是不变的。段地址存储在段寄存器中
  • 偏移地址:存放指令的偏移地址。读写数据时,偏移地址第一次为0,每读写一次数据,偏移地址就偏移上一次所处理数据的大小。存在指令指针存储器中

四、IP寄存器

  • IP寄存器:指令指针存储器

五、演示案例

  • 下面使用16进制,所以CS中的2000*16就变为20000

  • 第一此读取时,CS中段地址为2000,IP中偏移地址为0,所以物理地址为20000。执行mov ax,0123H指令。
  • 执行完第一条指令之后,执行第二条mov ax,bx指。CS中段地址还是20000,IP中偏移地址变为3(因此上一次地址读取了三段),所以下一次CPU读取内存时,从20003开始.....依次类推

六、jmp指令

jmp:转移指令

1.功能

  • 改变CS、IP寄存器的值,从而改变CPU读写内存的位置

2.格式

  • jmp  段地址:偏移地址   //同时改变段地址和偏移地址
  • jmp  指定寄存器     //只将IP寄存器的值变为指定寄存器的值

3.演示案例

jmp   2AE3:3

执行后,CS=2AE3H,IP=0003H。

CPU将从2AE33H处读取指令

jmp   3:0B16 执行后CPU将从00B46H处读取指令
jmp  ax

执行之后,CS不变,但是IP的值变为ax寄存器的值

例如:执行前,ax=1000H,执行后IP=1000H,ax和CS都不变

jmp   bx 执行之后,CS不变,但是IP的值变为bx寄存器的值

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/88375793