第二章:寄存器(CPU工作原理)10
让编程改变世界
Change the world by program
段寄存器
段寄存器就是提供段地址的。 8086CPU有4个段寄存器:CS、DS、SS、ES 当8086CPU要访问内存时,由这4个段寄存器提供内存单元的段地址。CS和IP
CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器;
IP为指令指针寄存器。
8086PC读取和执行指令相关部件 [caption id="attachment_268" align="aligncenter" width="300"]

8086PC工作过程的简要描述
从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;
IP = IP + 所读取指令的长度,从而指向下一条指令;
执行指令。 转到步骤 (1),重复这个过程。
在 8086CPU 加电启动或复位后( 即 CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H。 即在8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令执行。 FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。 在任何时候,CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码,执行。 如果说,内存中的一段信息曾被CPU执行过的话,那么,它所在的内存单元必然被CS:IP指向过。修改CS、IP的指令
在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。 CPU从何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。 我们如何改变CS、IP的值呢? 8086CPU必须提供相应的指令 先回想我们如何修改AX中的值? mov 指令 如:mov ax,123 mov指令可以改变8086CPU大部分寄存器的值,被称为传送指令。 能够通过mov 指令改变CS、IP的值吗? mov指令不能用于设置CS、IP的值,8086CPU没有提供这样的功能。 8086CPU为CS、IP提供了另外的指令来改变它们的值:转移指令 同时修改CS、IP的内容:jmp 段地址:偏移地址
jmp 2AE3:3
jmp 3:0B16
功能:用指令中给出的段地址修改CS,偏移地址修改IP。 仅修改IP的内容:jmp 某一合法寄存器
jmp ax (类似于 mov IP,ax)
jmp bx
功能:用寄存器中的值修改IP。问题分析:CPU运行的流程
内存中存放的机器码和对应汇编指令情况: (初始:CS=2000H,IP=0000H) [caption id="attachment_270" align="aligncenter" width="300"]
代码段
对于8086PC机,在编程时,可以根据需要,将一组内存单元定义为一个段。 可以将长度为 N( N≤64KB )的一组代码,存在一组地址连续、起始地址为 16的倍数的内存单元中,这段内存是用来存放代码的,从而定义了一个代码段。 [caption id="attachment_271" align="aligncenter" width="260"]
小结
1、段地址在8086CPU的寄存器中存放。当8086CPU要访问内存时,由段寄存器提供内存单元的段地址。8086CPU有4个段寄存器,其中CS用来存放指令的段地址。 2、CS存放指令的段地址,IP存放指令的偏移地址。8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行。 3、8086CPU的工作过程:从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;
IP指向下一条指令;
执行指令。(转到步骤(1),重复这个过程。)
4、8086CPU提供转移指令修改CS、IP的内容。 检测点2.3 [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LNXZRVOWJVHL']视频下载[/Downlink]