zoukankan      html  css  js  c++  java
  • [汇编学习笔记][第九章转移指令的原理]

    第九章 转移指令的原理

    分类

    • jmp转移行为

      • 段内转移
        • 短转移 IP修改范围-128~127
        • 近转移 IP修改范围-32768~32768
      • 段间转移
    • 几个其余转移

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

    通过深入理解转移指令jmp来理解CPU执行转移指令的基本原理

    9.1 操作符offset

    操作符offset是伪指令,取得标号的偏移地址。

    还可以在标号出现之前使用,反正标号最后由编译器统一处理

    9.2 jmp指令

    两种语法

    • 转移目的地址
    • 转移的距离

    9.3 根据位移进行的jmp指令

    jmp short 标号(转到标号处执行指令)
    
    • 标号会被编译器翻译为IP

    • CPU在执行jmp指令的时候并不需要转移的 目标地址

    • jmp short 标号指令所对应的机器码中,不包含转移的地址,而包含的是转移的位移

      这个位移是编译器根据标号计算出来的

    • 所以jmp short 标号的功能为:(IP)=(IP)+8位位移(-128~127)

      1. 8位位移=标号地址-jmp指令后的第一个字节的地址
      2. short表明为8位位移,负数用补码表示
    • 还有一种jmp near ptr 标号的功能为:(IP)=(IP)+16位位移

      1. 16位位移=标号地址-jmp指令后的第一个字节的地址
      2. near ptr 表示段内近转移

    9.4 根据目的进行的jmp指令

    • jmp far ptr 标号

    • 标号会被编译器翻译为CS:IP

    • 在机器指令中也是用CS:IP来指定目标地址,而不是通过位移

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

    • jmp 16位reg
    • (IP)=(16位reg)

    • 与之对应的机器指令有什么含义?

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

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

      使IP=[内存单元地址],因为IP是一个word,所以必须要jmp word,没有jmp byte

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

      内存单元存放两个字,高地址表示段地址,低地址表示偏移地址

      • CS=(内存单元)+2
      • IP+(内存单元)

    9.7 jcxz指令

    jcxz 指令为有条件转移指令,所有的有条件转移指定都是 短转移
    对IP的修改范围位-128~127

    • 格式:jcxz 标号
    • 操作: 当(cx)=0 时,IP=(IP)+8位位移
    • 等于

      if((cx)==0)
          jmp short 标号

    9.8 loop指令

    loop 指令为循环指令,所有的循环指令都是短转移

    • 格式 loop 标号
    • 操作:

      • (cx)=(cx)-1
      • 如果(cx)!=0 ,(IP)=(IP)+8位位移
    • 等于

      (cx)--;
      if((cx)!=0)  jmp short 标号

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

    有利于程序段在内存中的浮动装配,是的程序段加载到内存什么位置都没有问题

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

    如果转移范围超界,编译的时候,编译器会报错。

  • 相关阅读:
    rn相关文档
    《浅谈我眼中的express、koa和koa2》好文留存+笔记
    (四)Spring 对DAO 的支持
    (三)Spring 之AOP 详解
    (二)Spring 之IOC 详解
    SVN文件上感叹号、加号、问号等图标的原因
    Windows平台下不同版本SVN对比
    eclipse中启动Genymotion模拟器的错误
    (一)问候Spring4
    (十一)Hibernate 高级配置
  • 原文地址:https://www.cnblogs.com/zy691357966/p/5480518.html
Copyright © 2011-2022 走看看