转移指令的原理

转移指令:可以修改IP或者同时修改CS和IP的指令(jmp、loop、call)
总的来说,转移指令就是可以控制CPU执行内存中某处代码的指令。
8086的转移行为有一下几类:

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

由于转移指令对IP的修改范围不同,段内转移,又分为:短转移和近转移

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

loop——》无条件转移指令
jmp——》条件转移指令

操作符offset

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

assume cs:code
code segmentstart: mov ax,offset start ;相当于mov ax,0;start所标记的是代码段的第一条指令,偏移地址为0s: mov ax,offset s  ;相当于mov ax,3;s所标记的指令是代码段中的第二条指令,第一条指令的长度为3byte,则s的偏移地址为3
code ends
end start

问题:有如下程序段,填写两条指令,使改程序在运行中将s处的第一条指令复制到s0处:

代码如下:

;问题:有如下程序段,填写两条指令,使改程序在运行中将s处的第一条指令复制到s0处:
assume cs:code
code segments: mov ax,bx ;mov ax,bx机器码占两个字节mov si,offset smov di,offset s0mov dx,cs:[si] ;数据从哪里来mov cs:[di],dx ;数据到哪里去s0: nop ;cpu遇到nop指令什么都不做,nop指令占一个字节nop
code ends
end s

JMP指令

8086CPU执行过程
①CPU从cs和ip所组合出来的地址读取数据,将指令放到指令缓冲器中
②IP=IP+所读指令的字节数
③执行指令缓冲器中的内容,跳转到第一步

 jmp smov bx,1000H
s:  mov ax,1000H ;由观察可得此时**JMP指令的机器码是EB04**

再加一条指令:

 jmp smov bx,1000Hmov bx,1000H
s:  mov ax,1000H ;由观察可得此时**JMP指令的机器码是EB07**

jmp跳转指令编译后的机器码和指令的长度有关
CPU在执行jmp指令的时候,并不需要跳转的目的地址就可以实现对IP寄存器的修改,只要做一个加法就好了
编译器如何计算指令长度?
标号地址 - JMP指令后第一个字节的地址

JMP指令可能存在的一个问题:

s: mov ax,1000Hjmp s ;jmp在下面

由标号地址-JMP指令后第一个字节的地址计算得到:(8-D=FB)——》(8-13=-5)
计数器中是没有减法的——》加上一个负数

涉及到补码:
将一个正数变成二进制之后按位取反(0变1,1变0),再加1
eg:5的二进制:0000 0101
取反:1111 1010 +1 =1111 1011(FB)

jmp指令的跳转范围:(向前跳 or 向后跳)
;跳转范围也叫做位移范围 八位位移(-128~127)
十六位位移(-32768~32767)

可以指定是八位位移还是十六位位移:
jmp short s(八位位移)
jmp near ptr s(十六位位移)

操作符offset 和 jmp指令相关推荐

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

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

  2. jmp指令对应的机器码

    od随便打开一个记事本,汇编几条jmp指令,可以看到如下 地址           HEX              反汇编 010073B4     - E9 7B9E8787      JMP 8 ...

  3. 转移地址在内存中的jmp指令 检测点9.1

    转移地址在内存中的jmp指令有两种格式: (1)jmp word ptr 内存单元地址(段内转移) 功能:从内存单元地址处开始存放着一个字,是转移的目的偏移地址. mov ax,0123h mov d ...

  4. 转移的目的地址在指令中的jmp指令 转移地址在寄存器中的jmp指令

    机器码中并没有包含转移的目的地址,只是给了一个位移的范围,通过位移的方式,实现对ip寄存器的修改. 转移的目的地址在机器码中的jmp指令 jmp far ptr s 转移的目的地址在寄存器中的jmp指 ...

  5. JMP指令转换公式推导

    看完郁金香第020课总结: 同样的一句指令 JMP 88881234在不同位置有以下现象 找规律: 88881234 - 010073bb = 87879E79 88881234 – 010073c0 ...

  6. 操作符offset和seg

    offset获得标号的偏移地址 seg获得标号的段地址 mov ax,offset begin jmp ax mov ds,ax begin: add ax,bx -u 0CA0:0000 B8070 ...

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

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

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

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

  9. 汇编jmp指令的理解与用法

    这篇文章是在学习过程中对于转移地址偏移地址的理解以及网上缺乏帮助理解计算转移地址偏移地址的前提下诞生的.初次写知识点分享,如有误,请指出多包含. JMP是在编写程序中经常使用的指令,它的功能是转移到指 ...

最新文章

  1. electron 使用中的注意事项
  2. 常见服务器小机型号,小机服务器一览.ppt
  3. idea从gitlab拉项目到本地_Git入门-基础命令,用github免费服务器域名部署小项目...
  4. JAVA线程的interrupt
  5. JS 数字,金额用逗号隔开
  6. 数据库里的小知识❤️
  7. JDK 1.8 - 1.7
  8. python接口在哪里_在Python中实现接口?
  9. Telegram纸飞机电报更改为设置为中文汉化教程
  10. 【自然语言处理】浅谈语料库
  11. C语言常见面试题汇总
  12. 第二个项目---EMOS企业在线办公小程序
  13. 高斯分布4——联合概率分布
  14. VS2013 由Unicode字符集切换为多字节字符集后编译报错
  15. 2020家用千兆路由器哪款好_2020家用路由器推荐
  16. CSDN博客去图片水印
  17. 范德堡大学计算机专业课程,2020年范德堡大学专业设置
  18. 数据结构之冒泡排序的两个优化细节
  19. NetSuite SuiteQL Query Tool
  20. 【自然语言处理】潜在语义分析【上】潜在语义分析

热门文章

  1. hdu 4012(bfs+位压缩)
  2. 简单理解session
  3. Java初学者推荐的几本书
  4. scrapy-redis 分布式学习记录
  5. HUE配置文件hue.ini 的zookeeper模块详解(图文详解)(分HA集群)
  6. linux命令详解:md5sum命令
  7. java五子棋胜负判定_五子棋的判断输赢规则—Java编程(简单优化完整版)
  8. 【Excel】一次性快速批量删除下面多余的空白行
  9. 【随笔】深度学习之美——杨家有女初长成,养在深闺人未识
  10. 【Paper】研究论文不会写?先来学学怎么做西红柿炒鹌鹑蛋吧!