王爽汇编+2

学到了段寄存器,主要是CS和IP这2个寄存器,记住的有:

8086的有4个常用的段寄存器,CS,DS,ES,SS

CPU在任何时候把CS:IP指向的内容当做指令去执行

CS表示代码段地址,IP表示偏移地址

又到了做题的时候了,题目截图如下:

%title插图%num

解题:已知cpu执行指令的过程是先读取指令放入指令缓冲器,接着IP指向下一条指令,再来执行指令,假设执行如图的第一条指令之前CS=3000H,IP=2H,此时按照流程来执行如图的第一条指令时先读取指令放入指令缓冲器,读取后将IP的值+2H 此处是第一次修改IP的值,IP=2H+2H=4H,4H就是下一条指令的偏移地址,接着开始执行第一条指令,执行完毕后读取第二条指令,然后将IP指向下一条指令,指向下一条指令之前需要先计算,IP=4H+2H=6H,下一条指令的偏移地址是6H,IP变成了6H,这是第二次修改,接着执行第二条指令,执行完毕后开始读取第三条指令,读取指令放入指令缓冲器,接着IP=6H+2H=8H,下一条指令的偏移地址是8H,这是第三次修改,接着执行第三条指令,第三条指令是jmp ax,由于jmp可以直接修改IP的值,执行后IP=ax,这是第四次修改,所以IP寄存器在这段代码执行完毕后发生了4次修改,由于sub ax,ax的指令将ax的值变成了0,IP=ax=0,所以最后ip的值是0

发表回复