汇编语言(三)----寄存器(下)【笔记】

段寄存器

接下来我们来说什么部件提供段地址:

8086CPU有4个寄存器:CS、DS、SS、ES。当8086CPU要访问内存时由这四个寄存器提供内存单元的段地址。

CS和IP

CS和IP是8086CPU中两个最为关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器,从名称上我们可以看出它们和指令的关系。

在8086PC机中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存M*16+N单元开始,读取一条指令并执行。
也可以这样表述,在任何时刻,CPU将CS:PS指向的内容当作指令执行。

8086CPU的工作简述为:
1.从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
2.IP=IP+所读取的指令长度,从而指向下一条指令;
3.执行指令,转到步骤1,重复该过程。
所以CS和IP的内容提供了CPU要执行指令的地址。
一段信息如果被CPU执行的话,那么它一定被CS:IP指向过。

修改CS、IP的指令

程序员通过改变CS、IP中的内容来控制CPU执行目标命令。

传送指令mov
mov不能用来改变CS、IP的值,因为8086CPU没有提供这样的功能。我们可以使用“jmp”指令来修改CS、IP指令。
形如: jmp段地址:偏移地址
如:
jmp 2AE3:3,执行后:CS=2AE3H,IP=0003H,CPU将从2AE33H处读取指令。
jmp 3:0B16,执行后:CS=0003H,IP=0B16H,CPU将从00B46H处读取指令。
“jmp 段地址:偏移地址”指令的功能为:用指令中给出的段地址修改CS,偏移地址修改IP。
若想仅修改IP内容,可用形如“jmp 某一合法寄存器”的指令完成,如
jmp ax,指令执行前:ax=1000H,CS=2000H,IP=0003H
指令执行后:ax=1000H,CS=2000H,IP=1000H
jmp bx,指令执行前:ax=0B16H,CS=2000H,IP=0003H
指令执行后:ax=0B16H,CS=2000H,IP=0B16H
jmp ax,在含义上可以理解为:mov IP,ax

代码段

一组地址连续,起始地址为16的倍数的内存单元中存放一组长度为N的代码,即定义了一个代码段。

猜你喜欢

转载自blog.csdn.net/qq_51000584/article/details/113446803