• 王爽《汇编语言》第三版 第九章 转移指令的原理


    引言

      8086CPU的转移指令分为以下几类:
        无条件转移指令 (如:jmp)
        条件转移指令
        循环指令(如:loop)
        过程
        中断

     

    9.1 操作符offset

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


    9.2 jmp指令

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


    9.3 依据位移进行转移的jmp指令

      jmp short 标号(转到标号处执行指令)这种格式的 jmp 指令实现的是段内短转移,它对IP的修改范围为 -128~127,也就是说,它向前转移时最多越过128个字节,向后转移最多越过127个字节。

      CPU 在执行EB 03(EB为jmp short的机器码)的时候,并不知道转移目的地址。

      

      jmp short s指令的读取和执行过程:
      1.(CS)=0BBDH,(IP)=0006,CS:IP指向EB 03(jmp short s的机器码);
      2.读取指令码EB 03进入指令缓冲器;
      3.(IP)=(IP)+所读取指令的长度=(IP)+2=0008,CS:IP指向add ax,1;
      4.CPU指行指令缓冲器中的指令EB 03;
      5.指令EB 03执行后,(IP)=000BH,CS:IP指向inc ax。

      指令“jmp near ptr 标号”的说明:
      1.16位位移=“标号”处的地址-jmp指令后的第一个字节的地址;
      2.near ptr指明此处的位移为16位位移,进行的是段内近转移;
      3.16位位移的范围为-32769~32767,用补码表示;
      4.16位位移由编译程序在编译时算出。


    9.4 转移的目的地址在指令中的jmp指令

      jmp short(near)指令,其对应的机器码中并没有转移的目的地址,而是相对于当前IP的转移位移。

      指令 “jmp far ptr 标号” 实现的是段间转移,又称为远转移:
      1.(CS)=标号所在段的段地址;
      2.(IP)=标号所在段中的偏移地址。
      3.far ptr指明了指令用标号的段地址和偏移地址修改CS和IP。

      


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

      jmp 16位寄存器功能:IP =(16位寄存器)。


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

      jmp dword ptr 内存单元地址(段间转移)功能:从内存单元地址处开始存放着两个字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址。


    9.7 jcxz指令

      jcxz指令为有条件转移指令,所有的有条件转移指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。对IP的修改范围都为-128~127。

      jcxz 标号 指令操作:当(cx)=0时,(IP)=(IP)+8位位移)。

      我们从 jcxz的功能中可以看出,指令“jcxz 标号”的功能相当于:if((cx)==0) jmp  short 标号;


    9.8 loop指令


    9.9 根据位移进行转移的意义

      jmp short 标号、jmp near ptr 标号、jcxz 标号、loop 标号等几种汇编指令,它们对 IP的修改是根据转移目的地址和转移起始地址之间的位移来进行的。不包含转移的目的地址,而包含的是到目的地址的位移距离。方便了程序段在内存中的浮动装配。

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

      根据位移进行转移的指令,它们的转移范围受到转移位移的限制,如果在源程序中出现了转移范围超界的问题,在编译的时候,编译器将报错。

    参考资料:《小甲鱼汇编零基础入门》

     

         《汇编语言》第三版

  • 相关阅读:
    springmvc整合mybatis框架源码 bootstrap
    观察者模式与.Net Framework中的委托与事件
    C#类型基础——学习笔记一
    知识图谱简介及常见应用场景
    Go语言实现bitmap算法
    互联网公司不同发展阶段需要什么样的技术负责人
    Go语言中使用切片(slice)实现一个Vector容器
    Go语言中defer语句使用小结
    使用interface与类型诊断机制判断一个类型是否实现了某个方法
    互联网产品发掘种子用户和意见领袖的方法
  • 原文地址:https://www.cnblogs.com/mubu/p/6360061.html
Copyright © 2020-2023  润新知