zoukankan      html  css  js  c++  java
  • 汇编 第九章 转移指令的原理

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

    可以控制CPU执行内存中某段代码的指令

     

    offset

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

    比如以下程序功能是将该程序在s处的指令复制到s0处

    assume  cs:codesg
    codesg segment
        s:  mov ax,bx   ;mov ax,bx的机器码占两个字节
             mov si, offset s
             mov di, offset s0
             mov ax,cs:[si]
             mov cs:[di],ax
        s0: nop     ;nop的机器码占一个字节
              nop    ;s0预留两个字节
    codesg ends
    end s
    

    jmp几种形式

    对应机器指令中给出转移位移

    jmp short功能为:Ip=IP+8位位移

    8位位移=标号处的地址-jmp指令后的第一个字节的地址,由编译程序在编译时算出

    short表明此处的位移为8位位移,范围为-128~127,用补码表示

    与jmp short相近功能的标号为

    jmp near ptr 

    near ptr指明位移为16位位移,进行的是段内近转移,范围为-32768~32767,用补码表示

    给出转移的地址

    jmp far ptr:段间转移,又称为远转移

    假设jmp far ptr s对应机器码:0B  0!  BD  0B

    则转移地址为0BBD:010B

     

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

    jmp 16位 reg  :IP=16位reg

     

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

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

    mov ax,0123h
    mov ds:[0],ax
    jmp word ptr ds:[0]
    ;执行后IP=0123H
    

      

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

    ;CS=内存单元地址+2
    ;IP=内存单元地址
    
    mov ax,0123H
    mov ds:[0],ax
    mov word ptr ds:[2],0
    jmp dword ptr ds:[0]
    ;执行后CS=0,IP=0123H
    ;指向0000:0123
    

     

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

    对IP修改范围都是-128~127

    功能相当于:

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

     

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

    功能相当于:

    cx--;

    if(cx!=0)jmp short 标号

    注意:转移超界问题 短转移:-128~127

    形如jmp 2000:0100这样的指令在debug中使用

    源程序中,编译器不认识,会报错

     

  • 相关阅读:
    原始套接字-自定义IP首部和TCP首部
    原始套接字-TCP/IP下三层数据显示
    ARP欺骗分析
    博弈论
    C++ map & set
    selenium+chrome配置环境
    windows下安装python+selenium
    python之configParser模块读写配置文件
    接口测试流程
    Python之读取文件配置
  • 原文地址:https://www.cnblogs.com/wtblogwt/p/10067586.html
Copyright © 2011-2022 走看看