zoukankan      html  css  js  c++  java
  • 转移指令的原理04 零基础入门学习汇编语言46

    第九章:转移指令的原理04

     

    让编程改变世界

    Change the world by program


     

    根据位移进行转移的意义

      前面我们讲到:

    jmp short 标号

    jmp near ptr 标号

    jcxz 标号

    loop 标号

    等几种汇编指令,它们对 IP的修改是根据转移目的地址和转移起始地址之间的位移来进行的。 在它们对应的机器码中不包含转移的目的地址,而包含的是到目的地址的位移距离。   这样设计,方便了程序段在内存中的浮动装配。 例如: [caption id="attachment_364" align="aligncenter" width="243"] 根据位移进行转移的意义[/caption]   这段程序装在内存中的不同位置都可正确执行,因为 loop s 在执行时只涉及到 s的位移( - 4,前移 4个字节,补码表示为FCH),而不是s的地址。   如果loop s的机器码中包含的是s的地址,则就对程序段在内存中的偏移地址有了严格的限制。 因为机器码中包含的是 s 的地址,如果 s 处的指令不在目的地址处,程序的执行就会出错。 而loop s的机器码中包含的是转移的位移,就不存在这个问题了。 因为,无论 s处的指令的实际地址是多少,loop指令的转移位移是不变的。  

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

      注意,根据位移进行转移的指令,它们的转移范围受到转移位移的限制,如果在源程序中出现了转移范围超界的问题,在编译的时候,编译器将报错。我们来测试一下! 注意: 我们在第2章中讲到的形如“jmp 2000:0100”的转移指令,是在 Debug 中使用的汇编指令,汇编编译器并不认识。 如果在源程序中使用,编译时也会报错。  

    实验八

    分析一个奇怪的程序!(利用转移原理“玩”系统一下~)  

    实验九

    根据材料编程(第一次——黑底白字下终于有了色彩!) [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LSAQUKWZODLD']视频下载[/Downlink]
  • 相关阅读:
    kubernetes部署Ingress Controller创建证书
    污点和容忍度
    Kubernetes部署coredns
    python中私有属性和私有方法
    类的约束
    reactjs 入门
    angularjs ngTable -Custom filter template-calendar
    sql 中条件in参数问题
    详解 nginx location ~ .*.(js|css)?$ 什么意思?
    CentOS 7.2.1511编译安装Nginx1.10.1+MySQL5.7.14+PHP7.0.11
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3847012.html
Copyright © 2011-2022 走看看