《汇编语言》之寄存器【下】
段的概念
在计算机中,内存本质上并没有进行分段,段的划分来自于与CPU,由于8086CPU用段地址*16+便宜地址=物理地址的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。
分段是人为逻辑上的划分。
CPU访问内存单元时,必须向内存提供内存单元的物理地址。
段寄存器
8086CPU在访问内存时,需要段地址和偏移地址经由地址加法器生成20位的内存物理地址进行寻址。段寄存器就是用于存放8086CPU的段地址。8086CPU中一共有4个段寄存器:CS、DS、SS、ES。
CS:代码段寄存器
DS:数据段寄存器
SS:堆栈段寄存器
ES:附加段寄存器
CS和IP
CS和IP是8086CPU中两个最关键的寄存器,它们指示了CPU当前要读取指令的地址。
实际上CS中的值就是段地址,IP中的值就是偏移地址,通过加法计算器得出20位的物理地址,此处的物理地址用于指向指令存放的地方。
CPU读取指令的简要工作过程如下:
- 从CS:IP指向的内存单元读取指令,读取的指令进入CPU的指令缓冲器
- IP(偏移地址)获取读取指令的长度,进行动态变化,指向内存中的下一条指令
- 执行指令
修改CS、IP的指令(转移地址)
CS和IP同时进行修改:jmp 段地址:偏移地址
仅修改IP:jmp 某一合法的寄存器(原理就是把值存入寄存器,再将寄存器复制给IP)
小结
- 段地址再8086CPU的段寄存器中存放。当8086CPU要访问内存时,由段寄存器提供内存单元的段地址。8086CPU有四个段寄存器,其中CS用来存放指令的段地址。
- CS存放指令的段地址,IP存放指令的偏移地址。8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行
8086CPU的工作工程
- 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器
- IP指向下一条指令
- 执行指令
- 8086CPU提供转移指令来修改CS、IP的内容