zoukankan      html  css  js  c++  java
  • 王爽《汇编语言》第三版 第九章 转移指令的原理

    引言

      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 编译器对转移位移超界的检测

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

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

     

         《汇编语言》第三版

  • 相关阅读:
    2018 ACM 网络选拔赛 徐州赛区
    2018 ACM 网络选拔赛 焦作赛区
    2018 ACM 网络选拔赛 沈阳赛区
    poj 2289 网络流 and 二分查找
    poj 2446 二分图最大匹配
    poj 1469 二分图最大匹配
    poj 3249 拓扑排序 and 动态规划
    poj 3687 拓扑排序
    poj 2585 拓扑排序
    poj 1094 拓扑排序
  • 原文地址:https://www.cnblogs.com/mubu/p/6360061.html
Copyright © 2011-2022 走看看