美文网首页汇编
【笔记】汇编中jmp指令的相关处理

【笔记】汇编中jmp指令的相关处理

作者: Pino_HD | 来源:发表于2017-07-29 12:31 被阅读158次

    0x01 前记

    编译器有一个地址地址计数器(AC),编译器在编译的过程中,每读到一个字节AC就加1.

    0x02 jmp指令之向前转移

    在向前转移时,编译器可以在读到标号s后记下AC的值as,在都到jmp ... s后记下 AC的值aj。编译器计算而这的差值disp。

    • 当disp在-128到127之间,编译指令不管是
      • jmp s
      • jmp short s
      • jmp near ptr s
      • jmp far ptr s
        中的哪一个,都将它转变为jmp short s,并写入机器码 EB disp
    • 当disp在-32768到32767之间,那么
    • jmp short s则会产生编译错误;
    • 对于jmp s和jmp near ptr s,都会当作jmp near ptr s看待,写入机器码 E9 disp
      -对于jmp far ptr s,会写入机器码 EA 偏移地址 段地址

    0x03 jmp指令之向后转移

    在这种情况下,编译器先读到jmp ... s指令。由于它还没有读到标号s,所以编译器此时还不能确定标号处的ac值,那么disp的值也不能确定。
    此时,编译器将jmp ... s指令当作jmp short s来读取,记下jmp ... s指令的位置和ac的值。

    • 对于jmp short s,将生成EB和一个nop指令(相当于一个字节空间,存放8位disp)
    • 对于jmp s和jmp near s,将生成EB和两个nop指令
    • 对于jmp far ptr s,将生成EB和四个nop指令
      当向后读取到标号s时,记下ac的值,然后计算disp
    • 当disp的值在-128到127之间
      • 不管指令是哪种,都会在前面jmp ... s的地方写入EB disp
    • 当disp的值在-32768到32767之间
      • 对于jmp short s会产生错误
      • 对于jmp s和jmp near ptr s将会写入E9 disp
      • 对于jmp far ptr s将会写入EA 偏移地址 段地址

    相关文章

      网友评论

        本文标题:【笔记】汇编中jmp指令的相关处理

        本文链接:https://www.haomeiwen.com/subject/wpnqlxtx.html