0207 jmp跳转指令

事实:执行何处的指令,取决于CS:IP
应用:可以通过改变CS、IP中的内容,来控制CPU要执行的目标指令

如何改变CS、IP的值,以使得命令灵活执行

问题:如何改变CS、IP的值?

方法1:Debug 中的 R 命令可以改变寄存器的值——r cs, r ip

这种方式是可行的,但是Debug是调试手段,并非程序方式!

方法2:用汇编指令修改CS、IP

1
2
mov cs, 2000H
mov ip, 0000H

上述代码是不被指令集允许的,8086CPU不提供对CS和IP修改的指令,另辟蹊径:

1
2
mov ax,2000H
mov cs,ax

使用通用寄存器的值来改变CS中的值,这是允许的,但一般不这么做

1
2
mov bx,0
mov ip, bx

使用通用寄存器的值来改变IP中的值,这是不被指令集允许的,IP的内容只支持通过执行命令后的自增运算改变其内容

方法3:转移指令jmp

jmp指令可以

1、jmp 段地址:偏移地址——同时修改CS:IP的内容

1
2
jmp 2AE3:3
jmp 3:0B16

功能:用指令中给出的段地址修改CS的内容,用指令中给出的偏移地址修改IP的内容

2、jmp 某一合法寄存器(一般为通用寄存器)——仅修改IP的内容

1
2
jmp ax (类似于 mov IP, ax,但指令集不允许直接mov IP,ax)
jmp bx

功能:用寄存器中的值修改IP

问题分析

如下图所示,内存中从10000H处开始存在着一些指令,从20000H处开始又存在着另一些指令,当前CS:IP = 2000:0000

image-20230903143705583

从20000H开始,执行指令的顺序是

(1)mov ax,6622

(2)jmp 1000:3

(3)mov ax,0000

(4)mov bx,ax

(5)jmp bx

(6)mov ax,0123H

(7)转到第(3)步执行

Debug验证命令执行(上述代码可以看成是汇编语言循环的一种简单实现)

1、在指定内存单元写入汇编命令

image-20230903144658300

2、-r命令指定CS:IP 的内容

image-20230903144751671

3、-t:开始执行CS:IP

image-20230903145023448

image-20230903145150918

站内搜索

没有找到内容!