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中使用

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

     

  • 相关阅读:
    ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题
    Linux学习安装
    linux中的虚拟环境工具
    linux 文件目录权限
    PHP利用百度ai实现文本和图片审核
    Laravel + Swoole 打造IM简易聊天室
    Mysql索引降维 优化查询 提高效率
    Nginx支持比Apache高并发的原因
    网站高并发解决方案(理论知识)
    mysql大量数据分页查询优化-延迟关联
  • 原文地址:https://www.cnblogs.com/wtblogwt/p/10067586.html
Copyright © 2011-2022 走看看