• 跳转指令原理


    offset 标号
     取得标号处的偏移位置

    jmp short 标号
     段内短跳转
     (IP)=(IP)+8位位移 【有符号的位移(-128~127)】

    jmp near ptr 标号
     段内近转移 
     (IP)=(IP)+16位位移 【有符号的位移(-132768~32767)】

    jmp far ptr 标号
     段间转移
     (CS)=标号所在段的段地址
     (IP)=标号在段中的偏移地址
     比如:
      EA 0B 01 BD OB
      高地址"BD OB" ==> 转移的段地址
      低地址"0B 01" ==> 偏移地址

    jmp 16位寄存器
     (IP)=(16位寄存器)

    jmp word ptr 内存单元地址(段内转移)
     从内存单元地址处开始存放着一个字,是转移的目的偏移地址

    (IP)=(内存单元地址)
    jmp dword ptr 内存单元地址(段间转移)
     从内存单元地址处开始存放着两个字
      高地址处的字 ==> 转移的目的段地址
      低地址处的字 ==> 转移的目的偏移地址
     (CS)=(内存段元地址+2)
     (IP)=(内存单元地址)

    jcxz 标号
     有条件转移指令
     所有的有条件转移指令都是短转移
     对应的机器码中包含转移的位移,而不是目的地址【IP范围(-128~127)】
     当(CX)=0时,(IP)=(IP)+8位位移

    loop 标号
     (CX)=(CX)-1,如果(CX)!=0,转移到标号处执行
     1、(CX)=(CX)-1
     2、如果(CX)!=0,(IP)=(IP)+8位位移

    注意:
     nop
     相当于占位符,一个字节大小

    ret和retf
    ret
     ret指令用栈中的数据,修改IP的内容,从而实现近转移
     1、(IP)=((ss)*16+(sp))
     2、(sp)=(sp)+2
    retf
     retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移
     1、(IP)=((ss)*16+(sp))
     2、(sp)=(sp)+2
     3、(CS)=((ss)*16+(sp))
     4、(sp)=(sp)+2
     
    call 标号
     将当前的IP压入栈后,转到标号处执行指令
     1、(sp)=(sp)-2
     2、((ss)*16+(sp))=(IP)
     3、(IP)=(IP)+16位位移
     
    call far ptr 标号
     1、
      (sp)=(sp)-2
      ((ss)*16+(sp))=(CS)
      (sp)=(sp)-2
      ((ss)*16+(sp))=(IP)
     2、
        (CS)=标号所在的段地址
        (IP)=标号所在的偏移地址

    call 16位寄存器
     功能:
        (sp)=(sp)-2
        ((ss)*16+(sp))=(IP)
        (IP)=16位寄存器
     
    call word ptr 内存单元地址
     汇编语法解释:
      push IP
      jmp word ptr 内存单元地址
     
    call dword ptr 内存单元地址
     汇编语法解释:
      push CS
      push IP
      jmp dword ptr 内存单元地址

  • 相关阅读:
    Spring异常之版本错误
    SpringMVC格式转化错误之HTTP Status [400] – [Bad Request]
    Spring错误之org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'bookService' is expected to be of type 'pw.fengya.tx.BookService' but was actually of type 'com.sun.proxy.$Proxy1
    02_版本控制工具SVN
    Hibernate异常之命名查询节点未找到
    Hibernate异常之Integer转float(自动类型转换错误)
    Hibernate异常之cascade
    Hibernate异常之关键字错误
    DHCP保留地址批量导入导出
    H3C和CISCO交换机禁止MAC地址通信
  • 原文地址:https://www.cnblogs.com/qintangtao/p/2859441.html
Copyright © 2020-2023  润新知