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

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)=寻址所得的存储单元的第二个字

汇编jmp指令的理解与用法相关推荐

  1. 汇编jmp指令的一些用法(王爽)

    jmp为无条件转移指令,可以只修改IP,也可以同时修改CS:IP jmp可以通过给定的转移距离或者目的地址进行跳转 按照位移跳转 jmp short 标号 修改ip的后八位,即跳转范围-128~127 ...

  2. 汇编:JMP指令原理

    cpu执行指令步骤: 1. 从cs和ip所组合出来的地址读取指令,将指令存放到指令缓存器中 2. 改变ip寄存器,ip = ip+所读指令的字节数 3.执行指令缓存器中的内容,跳转到第1步 assum ...

  3. 实现8086汇编编译器(三)——jmp指令的翻译

    文章目录 前言 jmp 汇编指令的格式 jmp 机器指令的格式 jmp 指令的翻译 jmp 操作数类型 解析操作数 checkJmp 的实现 encodeJmp 的实现 前言 直接看<汇编语言& ...

  4. cmp 字节 汇编_汇编 常用指令 cmp jmp call ret

    cmp 指令 功能相当于减法指令 只是不保存结果 不过cmp执行后会影响标志位 其它指令 通过识别标志位 来得知比较的结果 CPU在执行cmp指令时 像add sub指令一样 也包含两种含义 (有符号 ...

  5. 基于8086CPU微处理器的汇编学习之JMP指令

    JMP指令: 更改CS:IP寄存器的内容,以让CPU从新指定的内存地址开始继续执行指令. 格式: JMP  段地址:偏移地址 ------------------------------------- ...

  6. 贺利坚老师汇编课程47笔记:jmp指令无条件转移只修改IP

    指路老师的博客 JMP指令的功能 无条件转移,可以只修改IP,也可以同时修改CS和IP(段间转移) JMP指令要给出的信息 转移的目的地址 转移的距离 JMP 2000:1000;段间转移(远转移) ...

  7. JMP指令寻址方式总结,JMP BX指令寻址方式是什么

    jmp 指令的几种寻址方式 jmp short 标号 段间跳转 -128-127 jmp far ptr 标号 超段转移 跳转包含目标地址jmp reg 16位寄存器 jmp word ptr 内存单 ...

  8. jmp指令【原理详解 8086汇编语言+笔记】

    笔记目录 jmp指令原理详解篇(无条件转移指令) 1 初步理解 2 jmp指令格式(小总结) 3 jmp指令本质-详解 3.1 引子 3.2 jmp short 标号(jmp short s为例) 怎 ...

  9. 木马免杀之汇编花指令技巧

    木马免杀之汇编花指令技巧 作者: 逆流风(发表于<黑客X档案>07.07,转载注明出处)        相信很多朋友都做过木马免杀,早期的免杀都是加壳和改特征码,现在免杀技术已经发展到花指 ...

最新文章

  1. 关于AVR单片机熔丝位的设置和拯救方法大全 AVR单片机熔丝位的设置和详细的拯救方法...
  2. Python进阶04 函数的参数对应
  3. 交叉熵损失函数分类_交叉熵损失函数
  4. JVM03Java代码执行流程
  5. layui如何存在多个弹窗_layer重复弹出(layui弹层同时存在多个)的解决方法_心善_前端开发者...
  6. Linux文本转语音合成教程,〔教程〕使用TTS将文本转语音输出
  7. android uri parcel,Android ParcelFileDescriptor实现进程间通信
  8. 蓝桥杯笔记:带分数(dfs排列问题)
  9. [转载] python中实现矩阵乘法
  10. java去除以张开头的人名_写出java8实现对ListUser中的username字段过滤出不等于张三的数据...
  11. 图解deconvolution(transpose convolution)
  12. PLC编程系统的使用经验分享
  13. 天然气故障代码大全_天然气燃气表显示的数字代表什么(错误代码办法)
  14. 眼镜商城开发,让眼镜世界更丰富
  15. Linux普通用户su root权限的开启和禁止
  16. 计算机系统期末考试感想
  17. 【前端监控系统】埋点数据上报的3种方式
  18. 开源电子商城系统:罗列几个电子商城系统,和一个不错的开源电子商城项目:mall,先做技术调研,主要还是学习代码。
  19. 2022-8-3----Android10.0(MTK)-----SN_Writer 写入 SN 注意事项
  20. 什么是面向对象编程?终于懂了

热门文章

  1. python的歌曲评论数据分析_用Python分析44万条数据,揭秘如何成为网易云音乐评论区的网红段子手...
  2. 作业十一:安装关系型数据库MySQL
  3. numpy中ravel()与flatten()的区别
  4. 扫雷游戏软件测试,软件测试扫雷游戏.doc
  5. 瓦力部署系统部署java_Walle瓦力部署系统
  6. iOS MJ 刷新 一些自定义
  7. 苹果三代耳机_硕美科真无线耳机W20,质价比新品上市!
  8. mysql数据库学习(keep update)
  9. python拼多多领现金_拼多多领现金100元攻略 100元快速提现技巧
  10. loopy()代表什么意思,怎么用