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]
  • 相关阅读:
    MongoDB 比较运算符 $eq$gt
    leetcode — median-of-two-sorted-arrays
    leetcode — longest-substring-without-repeating-characters
    leetcode — add-two-numbers
    leetcode — two-sum-iii-data-structure-design
    leetcode — two-sum-ii-input-array-is-sorted
    leetcode — two-sum
    linux 命令 — sed
    linux 命令 — 文件相关
    linux 命令 — lsof
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3847012.html
Copyright © 2011-2022 走看看