ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

九--转移指令的原理

2022-09-10 00:01:27  阅读:192  来源: 互联网

标签:标号 -- IP jmp 地址 指令 原理 转移


可以修改IP,或同时修改CS和IP的指令统称为转移指令

8086转移行为分为:

  只修改IP,称为段内转移,如:jmp ax

  同时修改CS和IP,称为段间转移,如jmp 1000:0

根据转移指令对IP的不同修改范围,段内转移分为:

  短转移:IP修改范围为-128~127

  近转移:IP修改范围为-32768~32767

8086的转移指令分为:

  无条件转移指令(如jmp)

  条件转移指令

  循环指令(如loop)

  过程

  中断

1.操作符offset

  offset是由编译器处理的符号,功能是取得标号处的偏移地址

  

 

 2.jmp指令

  jmp为无条件转移指令,可以只修改IP,也可以同时修改CS和IP

  jmp指令要给出两种信息:

    转移的目的地址

    转移的距离(段间转移、段内短转移、段内近转移)

3.根据位移进行转移的jmp指令

  jmp short 标号(转到标号处执行指令)

    向前转移时最多越过128个字节,向后转移时最多越过127个字节,转移结束后,CS:IP指向标号处指令

    

 

   

 

   一般的汇编指令,idata不论它是一个数据还是内存单元的偏移地址,都会在对应的机器指令中出现。

  

 

  debug将jmp short s中的s表示为inc ax指令的偏移地址8,jmp short s表示为jmp 0008,表示转到CS:0008处

  但机器码中却不包含0008

  cpu在执行jmp指令时不需要转移的目标地址

  EB 03没告诉cpu目标地址,却告诉了cpu要转移的位移,即令IP向后移动三个字节

  实际上“jmp short 标号”的功能是:(IP)=(IP)+8位位移

  ①8位位移=标号处的地址-jmp指令后的第一个字节的地址

  ②short指明此处的位移为8位位移,补码表示

  ③8位位移的范围为-127~128

  ④8位位移由编译程序在编译时算出

  与jmp short类似,“jmp near ptr 标号”实现段内近转移,功能为(IP)=(IP)+16位位移

  ①16位位移=标号处的地址-jmp指令后的第一个字节的地址

  ②near ptr指明此处的位移为16位位移,进行的是段内近转移

  ③16位位移的范围为-32768~32767,用补码表示

  16位位移由编译程序在编译时算出

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

  jmp far prt 标号,实现段间转移,又称为远转移

    (CS)=标号所在段的段地址

    (IP)=标号在段中的偏移地址

    far ptr指明了用标号的段地址和偏移地址修改CS和IP

  

 

  jmp far ptr s对应EA 0B 01 BD 0B,其中包含目的地址“0B 01 BD 0B”

    高地址BD 0B是段地址0BBDH,低地址0B 01是偏移地址010BH

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

  jmp 16位reg

  功能(IP)=(16位reg)

6.转移地址在内存中的jmp指令

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

    功能:从内存单元地址处开始存放一个字,是转移的目的偏移地址

    内存单元地址可用寻址方式的任一格式给出

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

    功能:从内存单元地址处开始存放两个字,高地址的字是转移的目的段地址,低地址是转移的目的偏移地址

    (CS)=(内存单元地址+2)

    (IP)=(内存单元地址)

 7.jcxz指令

  jcxz:有条件转移指令  

  所有有条件转移指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址

  格式:jcxz 标号

    如果(cx)=0 转移到标号处执行

    (cx)=0时,(IP)=(IP)+8位位移

    (cx)!=0时,什么也不做

    相当于if((cx)==0)jmp short 标号

8.loop指令

  所有循环指令都是短转移

9.根据位移进行转移的意义

10.编译器对转移位移超界的检测

 

标签:标号,--,IP,jmp,地址,指令,原理,转移
来源: https://www.cnblogs.com/cangshiqian/p/16653033.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有