《汇编语言》之寄存器【下】

QQ图片20210204213327.png

段的概念

在计算机中,内存本质上并没有进行分段,段的划分来自于与CPU,由于8086CPU用段地址*16+便宜地址=物理地址的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。

分段是人为逻辑上的划分。

CPU访问内存单元时,必须向内存提供内存单元的物理地址。

Snipaste_2021-02-05_23-23-08.png

段寄存器

8086CPU在访问内存时,需要段地址和偏移地址经由地址加法器生成20位的内存物理地址进行寻址。段寄存器就是用于存放8086CPU的段地址。8086CPU中一共有4个段寄存器:CS、DS、SS、ES。

CS:代码段寄存器

DS:数据段寄存器

SS:堆栈段寄存器

ES:附加段寄存器

CS和IP

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

实际上CS中的值就是段地址,IP中的值就是偏移地址,通过加法计算器得出20位的物理地址,此处的物理地址用于指向指令存放的地方。

CPU读取指令的简要工作过程如下:

Snipaste_2021-02-05_23-23-08.png

  1. 从CS:IP指向的内存单元读取指令,读取的指令进入CPU的指令缓冲器
  2. IP(偏移地址)获取读取指令的长度,进行动态变化,指向内存中的下一条指令
  3. 执行指令

修改CS、IP的指令(转移地址)

CS和IP同时进行修改:jmp 段地址:偏移地址

仅修改IP:jmp 某一合法的寄存器(原理就是把值存入寄存器,再将寄存器复制给IP)

小结

  1. 段地址再8086CPU的段寄存器中存放。当8086CPU要访问内存时,由段寄存器提供内存单元的段地址。8086CPU有四个段寄存器,其中CS用来存放指令的段地址。
  2. CS存放指令的段地址,IP存放指令的偏移地址。8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行
  3. 8086CPU的工作工程

    1. 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器
    2. IP指向下一条指令
    3. 执行指令
  4. 8086CPU提供转移指令来修改CS、IP的内容
Last modification:February 5th, 2021 at 11:24 pm