汇编jmp指令的理解与用法

这篇文章是在学习过程中对于转移地址偏移地址的理解以及网上缺乏帮助理解计算转移地址偏移地址的前提下诞生的。初次写知识点分享,如有误,请指出多包含。

JMP是在编写程序中经常使用的指令,它的功能是转移到指令指定的地址执行相应的指令。实际用法如下:

1,段内直接转移

1)短转移

JMP SHORT 转移地址标号

功能:改变IP;(即:(IP)=(IP)+8位位移量

其中:式子右边(IP)为JMP后第一个字节的偏移地址;8位位移量为JMP机器指令中EB后接的16进制数值。

下边我们通过一道例题理解JMP指令转移地址偏移地址

例题:设有一段程序如下,假定(CS)=1000H

            汇编语言        机器指令偏移地址     短地址

          XOR  BX,BX        

          JMP SHORT  NEXT

           ADD  AX,BX

        

           MOV  BX,AX

NEXT:MOV AX,1

33  DB

EB  04

03  C3

8B  D8

B8  0001

0000

0002

0004

0006

0008

1000

1000

1000

1000

1000

              由表中程序我们可知,JMP的八位位移量为0004H;

             JMP后第一个指令即指令(ADD AX,BX)第一个字节的偏移地址为0004H;

             故执行JMP后,所得

               转移地址偏移地址=(IP)+位移量=0004H+0004H=0008H

             段内转移,故转移地址段地址=(CS)=1000H

故转移后物理地址=1000H×16+0008H=10008H

2)段内直接近转移

        jmp near ptr 转移地址标号

  或  JMP 数值偏移地址
       功能:(IP)=(IP)+16位位移

       与JMP SHORT的区别在于JMP NEAR PTR  转移的距离更远。SHORT转移范围为-128~127个字节;JMP NEAR PTR为-32768至32767。

例:将上例的(CS)改为1003H;

          JMP SHORT NEXT 改为

   JMP NEAR PTR NEXT

   此时JMP的机器指令随之变为 E9 04 00 占用3个字节,故JMP后第一个指令即指令(ADD AX,BX)第一个字节的偏移地址也随之更改为0005H

故执行JMP后,所得

               转移地址偏移地址=(IP)+位移量=0005H+0004H=0009H

             段内转移,故转移地址段地址=(CS)=1003H

故转移后物理地址=1003H×16+0009H=10039H

注意,在E9 04 00中,04为低字节,00为高字节

(以下用法偏移地址计算类似,故不再举例。

2.段间间接转移

 1)jmp  16位寄存器名
  功能:用寄存器中的值修改IP

 2)jmp WORD PTR 存储器寻址方式

 或 jmp 存储器寻址方式  

 功能:将存储单元的第一个字赋值给(IP)

 例:TABLE偏移地址为0010H,(DS)=1000H,(10015H)=12H,(10016H)=34H,(BX)=0005H 指令为:

  JMP WORD PTR TABLE[BX]

由TABLE[BX]可知寻的的地址为:1000H*16+(0010H+0005H)=10015H;

其第一个字的值为3412H;故执行JMP后(IP)=3412H。

 3.段间直接转移

 1) JMP FAR PTR  转移地址标号
功能:用转移地址标号的段地址和偏移地址分别修改CS和IP
      (CS)=转移地址标号所在段的段地址;(IP)=转移地址标号所在段的偏移地址

 2)JMP 段地址值:偏移地址

 (IP)=偏移地址值

 (CS)=段地址值

 4.段间间接转移

  JMP DWORD PTR 存储器寻址方式

 功能:(IP)=寻址所得的存储单元的第一个字

    (CS)=寻址所得的存储单元的第二个字

  • 4
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值