当前位置: 首页 > news >正文

4.6 offset指令,jmp short指令,far,dword ptr各种跳转指令

4.6 offset指令,jmp short指令,far,dword ptr各种跳转指令

可以修改IP,或同时修改CS和IP的指令统称为转移指令。概括的讲,转移指令就是可以控制CPU执行内存中某处代码的指令

1. 转移指令

1.1 8086CPU的转移行为有以下几类

  • 只修改IP时,称为段内转移,比如:jmp ax
  • 同时修改CS和IP时,称为段间转移,比如:jmp 1000:0

1.2 段内转移又分为:短转移和近转移

  • 短转移IP的修改范围为-128-~127
  • 近转移IP的修改范围为-32768~32767

1.3 8086CPU的转移指令分为以下几类

  • 无条件转移指令(如:jmp)
  • 条件转移指令
  • 循环指令(如:loop)
  • 过程
  • 中断

2. jmp short指令

  • jmp short 标号(转到标号处执行指令),这种格式的jmp指令实现的是段内短转移
  • 它对IP的修改范围为-128~127个字节
  • 转移指令结束后,CS:IP应该指向标号处的指令
  • 这里jmp存的不是目标地址,而是位移距离
assume cs:codesg  
codesg segmentstart:mov ax,0jmp short sadd ax,1s:inc axcodesg ends
end start

image.png

image.png

image.png

3. jmp far ptr指令

  • 当超出jmp short 范围时,编译会报错

image.png

  • 此时使用jmp far ptr指令即可
assume cs:codesg  
codesg segmentstart:mov ax,0mov bx,0inc cxjmp far ptr sdb 256 dup(0)s:inc axcodesg ends
end start

image.png

  • 注意:此时jmp记录的不是偏移量,而是整个地址,因为位移太大不好计算,直接记录cs:ip地址

image.png

4. 转换地址在内存中的jmp指令有两种格式

4.1 jmp word ptr 内存单元地址(段内转移)

  • 功能:从内存单元地址处开始存放着一个字,是转移的目的偏移地址;就是把指定内存单元的地址的数据拿过来作为跳转的地址
  • 例如:
assume cs:codesg  
codesg segmentstart:mov ax,0123hmov ds:[0],ax    jmp word ptr ds:[0]    //ds为段地址,[0]处的数据为偏移地址,将ip改为该地址codesg ends
end start

image.png

4.2 jmp dword ptr 内存单元地址(段间转移)

  • 如果要cs:ip同时更改,可以用这个
  • 功能:从内存单元地址处开始存放着两个字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址
  • cs = 内存单元地址 + 2;ip = 内存单元地址
assume cs:codesg  
codesg segmentstart:mov ax,0123hmov ds:[0],ax            //把ax的值赋给该地址的内存数据mov word ptr ds:[2],0    //把该地址处的内存数据改为0000jmp dword ptr ds:[0]     //跳转到cs:ip即0000:0123这个位置codesg ends
end start

image.png

image.png

image.png

  • cs为内存地址+2即ds:[2],0000
  • ip为内存地址即ds:[0],0123

5. jcxz指令

image.png

  • cx为0就跳转

6. 操作符offset指令

操作符offset在汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址

assume cs:codesg  
codesg segmentstart:mov ax,offset startmov dx,offset ss:mov bx,cxinc bxcodesg ends
end start

image.png

image.png

  • start 标号是0,所以offset取出start的偏移地址赋给ax
  • s 标号是6,所以offset取出s的偏移地址赋给dx
http://www.lryc.cn/news/331446.html

相关文章:

  • 【WEEK5】 【DAY5】DML语言【中文版】
  • 媒体偏见从何而来?--- 美国MRC(媒体评级委员会)为何而生?
  • Solana 线下活动回顾|多方创新实践,引领 Solana“文艺复兴”新浪潮
  • CSS3 实现文本与图片横向无限滚动动画
  • Android 性能优化之黑科技开道(一)
  • Successive Convex Approximation算法的学习笔记
  • IoT数采平台2:文档
  • Vue监听器watch的基本用法
  • MySQL UPDATE JOIN 根据一张表或多表来更新另一张表的数据
  • JS实现继承的方式ES6版
  • elementui 左侧或水平导航菜单栏与main区域联动
  • YUNBEE云贝-技术分享:PostgreSQL分区表
  • 5.2 通用代码,数组求和,拷贝数组,si配合di翻转数组
  • Oracle23免费版简易安装攻略
  • 《论文阅读》一种基于反事实推理的会话情绪检测无训练去偏框架 EMNLP 2023
  • 基于springboot+vue的健身房管理预约管理系统
  • 【编译lombok问题】已解决:编译突然找不到符号问题-get/set找不到符号
  • 第四篇:3.3 无效流量(Invalid traffic) - IAB/MRC及《增强现实广告效果测量指南1.0》
  • PyTorch示例——使用Transformer写古诗
  • vue 视频添加水印
  • Web Animations API 动画
  • 【大数据存储】实验五:Mapreduce
  • 日志服务 HarmonyOS NEXT 日志采集最佳实践
  • Educational Codeforces Round 133 (Rated for Div. 2) (C dp D前缀和优化倍数关系dp)
  • 【讲解下如何Stable Diffusion本地部署】
  • wps斜线表头并分别打字教程
  • 2024第八届全国青少年无人机大赛暨中国航空航天科普展览会
  • fastadmin学习08-查询数据渲染到前端
  • 实验报告答案
  • PDF编辑和格式转换工具 Cisdem PDFMaster for Mac