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]
  • 相关阅读:
    activemq安装及使用
    匿名内部类的简单使用
    Struts2中动态方法调用
    重定向和转发的区别
    result转发到一个action
    在Android Studio中导入jar包
    架构文档类别
    Linux/Unix下pid文件的作用
    【8.21校内测试】【最大生成树】【树状数组】【数学】
    【BZOJ】2653: middle
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3846033.html
Copyright © 2011-2022 走看看