ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
CS:IP是保存汇编指令的地方,它不会自动执行需要编译成可执行文件,或者在debug中使用t命令时才会将这些汇编指令取出来执行 CS:代码段寄存器 IP:指令指针寄存器 CS:IP:CPU将内存中的CS:IP指向的内容当做指令执行 ![](https://img.kancloud.cn/da/c1/dac115e5de57d86a26d13bcb4a3d95dc_709x423.png) ![](https://img.kancloud.cn/f6/ab/f6ab573d552cdffadebe8799f2fe0208_877x317.png) ![](https://img.kancloud.cn/00/10/0010f59a60c212bd5109a62cad9eb727_789x458.png) (1) 8086CPU当前状态: Cs中的内容为2000H, IP中的内容为0000H; (2)内存20000H-20009H单元存放着可执行的机器码; (3)内存20000H-20009H单元中存放的机器码对应的汇编指令如下。 地址: 20000H-20002H,内容: B8 23 01,长度: 3Byte,对应汇编指令: mov ax,0123H 地址: 20003H-20005H,内容: BB 03 00,长度: 3Byte,对应汇编指令: mov bx,0003H 地址: 20006H-20007H,内容: 89 D8,长度: 2Byte,对应汇编指令: mov ax,bx 地址: 20008H-20009H,内容: 01 D8,长度: 2Byte,对应汇编指令: add ax,bx **8086cpu执行一条指令的过程:** ![](https://img.kancloud.cn/45/9c/459c86b88f35afa4d1e5a68c0b68c1e0_777x373.gif) 此时, CS: IP指向内存单元2000:0003. 执行控制器执行指令B8 23 01(即mov ax.0123H) 指令B82301被执行后AX中的内容为0123H(此时, CPU将从内存单元2000:0003处读取指令。) CS:2000H, IP:0003H(CPU将从内存2000H× 16+0003H处读取指令BB 03 00) CPU从内存20003H处读取指令BB 03 00入指令缓沖器(IP中的值加3) 执行指令вв 03 00(D mov bx.0003н) CPU从内存20006H处读取指令89D8入指令缓冲器(IP中的值加2) 执行指令89 D8(即 mov ax,bx)后, AX中的内容为0003H CPU从内存20008H处读取指令01 D8入指令缓冲器(IP中的值加2) 执行指令01 D8(即add ax.bx)后, AX中的内容为0006H 将长度为10个字节的指令,存放在123B0H-123B9H的一组内存单元中,我们就可以认为, 123B0H-123B9H这段内存是用来存放代码的,是一个代码段,它的段地址为123BH,长度为10个字节 ``` mov ax, 0000 (B8 00 00) add ax,0123B (05 23 01) mov bx, ax (8B D8) jmp bx (FF E3) ``` 如何使得代码段中的指令被执行呢? CPU并不会自动地将我们定义的代码段中的指令当作指令来执行。 CPU只认被CS:IP指向的内存单元中的内容为指令。 所以,要让CPU执行我们放在代码段中的指令,必须要将CS:IP指向所定义的代码段中的第一条指令的首地址。对于上面的例子,我们将一段代码存放在123BOH-123B9H内存单元中,将其定义为代码段,如果要让这段代码得到执行,可设CS=123BH. IP=0000H。 ## **小结** (1)段地址在8086CPU的段寄存器中存放。当8086CPU要访问内存时,由段寄存器提供内存单元的段地址。8086CPU有4个段寄存器,其中CS用来存放指令的段地址. (2) CS存放指令的段地址, IP存放指令的偏移地址8086机中,任意时刻, CPU将CS:IP指向的内容当作指令执行。 (3) 8086CPU的工作过程:①从CS: IP指向的内存单元读取指令,读取的指令进入指令缓冲器:@IP指向下一条指令③执行指令。(转到步骤0,重复这个过程。) (4) 8086CPU提供转移指令修改cs,IP的内容。