一、段寄存器
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寄存器的值 |