《汇编语言》第二章2.9节~2.12节
2.9节 段寄存器段地址存放在段寄存器中,8086CPU有四个段寄存器:CS、DS、SS、ES。
2.10节 CS和IP
CS为代码段寄存器,IP为指令指针寄存器
在任意时刻,CS中的内存为M,IP中的内容为N,8086CPU将从内存M * 16 + N的物理地址访问内存,读取一条指令并执行(注意这里不是数据,二手指令)
8086CPU读取和执行指令的相关过程:
如2.6节形成物理地址的过程差不多,不过在那之前由CS提供段地址,有IP提供了偏移地址,最后将物理地址通过地址总线送到内存,然后将从内存得到的机器指令通过数据总线送到输入输出控制电路,输入输出控制电路将机器指令送入指令缓冲器,这时IP将自动在本身的基础上加从内存读取到的若干单元数,如读取了3B的内存单元,则 IP = IP + 3。最后执行控制器执行指令。
概括来讲就是:
(1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
(2)IP = IP + 所读取指令的长度,从而指向下一个指令;
(3)执行指令。转到步骤(1),重复这个步骤。
8086CPU在加电启动或复位后CS和IP被设置为CS = FFFFH,IP = 0000H,即8086PC机在启动或重启的时候执行的第一条指令的物理地址为FFFF0H,其中的指令为CPU第一条执行的指令。
如果内存中的某一条信息曾被CPU使用过的话,那么,它所在的内存单元必然被CS:IP指向过。
2.11节 修改CS、IP的指令
修改CS和IP不可以使用mov指令。
1、若想同时修改CS和IP可用”jmp 段地址:偏移地址“的指令完成。如;jmp 2AE3:3,执行后,CS = 2AE3H,IP = 0003H,CPU将从2AE3H处读取指令。
2、若想仅修改IP的内容,可用形如”jmp 某一合法的寄存器“的指令完成,如:jmp ax,指令执行前,ax = 1000H,CS = 2000H,IP = 0003H,指令执行后,ax = 1000H, CS = 2000H,IP = 1000H。
2.12节 代码段
我们可以将长度为N(N<=64KB)的一组代码,存在一组地址连续、起始位置为16的倍数的内存单元中,我们可以认为,这段内存是用来存放代码的,从而定义了一个代码段。
总结:
(1)CS和IP寄存器是分别来存放段地址和偏移地址的寄存器,CPU执行的都是他们指向内存中物理地址的的机器指令。
(2)在任意时刻,CPU执行的是CS:IP所指向的机器指令
(3)8086CPU的工作过程:
1、从CS:IP指向的内存读取指令,读取的指令进入指令缓冲器;
2、IP指向下一个指令
3、执行指令(重复步骤(1),重复这个过程)
(4)8086CPU提供可以修改CS和IP中内容的指令:
1、jmp 段地址:偏移地址
2、jmp 某一合法寄存器
页:
[1]