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]
  • 相关阅读:
    linux 命令——48 watch (转)
    linux 命令——47 iostat (转)
    linux 命令——46 vmstat(转)
    linux 命令——45 free(转)
    linux 命令——44 top (转)
    linux 命令——43 killall(转)
    linux 命令——42 kill (转)
    linux 命令——41 ps(转)
    linux 命令——40 wc (转)
    Java for LeetCode 068 Text Justification
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3847012.html
Copyright © 2011-2022 走看看