汇编语言修改CS, IP的指令

我们如何改变CS, IP的值呢?显然,8086CPU必须提供相应的指令。我们如何修改AX中的值?可以用mov指令,如mov ax,123将ax中的值设为123,显然,我们也可以用同样的方法设置其他寄存器的值,如mov bx,123 mov cx,123 , mov dx,123等。其实,8086CPU大部分寄存器的值,都可以用mov指令来改变,mov指令被称为传送指令

但是,mov指令不能用于设置CS. IP的值,原因很简单,因为8086CPU没有提供这样的功能。8086CPU为CS, IP提供了另外的指令来改变它们的值。能够改变CS, IP的内容的指令被统称为转移指令(我们以后会深入研究)。我们现在介绍一个最简单的可以修改CS, IP的指令:jmp指令
若想同时修改CS. IP的内容,可用形如‘`jmp段地址:偏移地址”的指令完成,如

jmp 2AE3:3,执行后:CS=2AE3H,  IP=0003H,  CPU将从2AE33 H处读取指令。
jmp 3:0B16,执行后:CS=0003H,  IP=OB16H,  CPU将从OOB46H处读取指令。

jmp 段地址:偏移地址,指令的功能为:用指令中给出的段地址修改CS,偏移地址修改IP
若想仅修改1P的内容,可用形如‘imp某一合法寄存器”的指令完成,如

jmp ax,指令执行前:ax=1000H, CS=2000H, IP=0003H
        指令执行后:ax=1000H, CS=2000H, IP=1000H
jmp bx,指令执行前:hx=0B16H, CS=2000H, IP=0003H
        指令执行后:bx=0B16H, CS=2000H, IP=0B16H

jmp某一合法寄存器指令的功能为:用寄存器中的值修改IP

jmp ax,在含义上好似:mov IP,ax

注意
我们在适当的时候,会用己知的汇编指令的语法来描述新学的汇编指令的功能。采用一种“用汇编解释汇编”的方法来使读者更好地理解汇编指令的功能,这样做有助于读者进行知识的相互融会。要强调的是,我们是用“已知的汇编指令的语法”进行描述,并不是用“已知的汇编指令”来描述,比如,我们用mov IP,ax来描述j mp ax,并不是说真有mov IP,ax这样的指令,而是用mov指令的语法来说明jmp指令的功能。我们可以用同样的方法描述
jmp 3:01B6的功能:
jmp 3:01B6在含义上好似
mov CS,3 movIP,O1 B6

问题2.3

内存中存放的机器码和对应的汇编指令情况如图2.27所示,设CPU初始状态:

CS=2000H IP=OOOOH

请写出指令执行序列。思考后看分析。

511遇见

分析
CPU对图2.27中的指令的执行过程如下:
(1)当前CS=2000H IP=0000H,则CPU从内存2000H* 16+0=20000H 处读取指令,读入的指令是:B8 22 66(mov ax,6622H),读入后IP=IP+3=0003H;
(2)指令执行后,CS=2000H , IP=0003H,则CPU从内存2000H * 16+0003H=20003H 处读取指令,读入的指令是:EA 03 00 00 10omp 1000:0003),读入后
IP=IP+5=0008H:
(3)指令执行后,CS=1000H , IP=0003H,则CPU从内存1000H X 16+0003H= I 0003 H处读取指令,读入的指令是:B8 00 00(mov ax,0000),读入后IP=IP+3=0006H;
(4)指令执行后,CS=1000H , IP=0006H,则CPU从内存IOOOH X 16+0006H=10006H处读取指令,读入的指令是:8B D8(mov bx,ax),读入后I P=IP+2=0008H ;
(5)指令执行后,CS=1000H , IP=0008H,则CPU从内存IOOOH X 16+0008H=10008H处读取指令,读入的指令是:PP B3(jmp bx),读入后IP=IP+2=OOOAH ;
(6)指令执行后,CS=1000H, IP=0000H,CPU从内存10000H处读取指令……
经分析后,可知指令执行序列为:

(1)   mov ax,6622H
(2)   jmp 1000:3
(3}   mov ax,0000
(4)   mov bx,ax
(5)   jmp bx
(6)   mov ax,0123H
(7)  转到第3步执行

发布日期:

所属分类: 易语言 标签: