pengsqian 发表于 2021-2-1 18:28:17

jmp远转移绝对地址是怎么确定的

jmp远转移指令中包含目标地址, 也就是说机器码中就包含了目标地址, 但是程序在运行时才能确定地址, 这个目标地址是怎么得来的, 难道是程序加载内存的时候, 动态改变的?

jackz007 发表于 2021-2-1 22:02:27

本帖最后由 jackz007 于 2021-2-1 22:26 编辑

       你说的是王爽汇编?不管是长跳转还是短跳转,只要不是跨段跳转,计算的都是从目的地和当前指令(跳转指令)之间的相对距离,也就是需要跨越的指令字节数。
149C:0100 EB00          JMP        0102                              
149C:0102 E9FB7E      JMP        8000                              
149C:0105 B8004C      MOV        AX,4C00                           
149C:0108 CD21          INT        21               
      先看看短跳转,JMP 102的指令字节是 EB 00,其中,操作码是 EB,操作数是 0,指令长度是 2 字节,就是说,从偏移地址 100 跳到 102,需要跨越的指令字节数是0,事实上也是如此,因为偏移地址 102 正好是下一条指令。
      再看看长跳转,JMP 8000 的指令字节是 E9 FB 7E,其中,操作码是 E9 ,操作数是 7EFB,指令长度是 3 个字节,下一条指令地址是 105,这些地址与指令之间,满足下面的关系:7EFB + 105 = 8000。
      由此可以看出,跳转指令、call 指令等等都是根据指令间的相对跨度关系来定位目标内存地址的,典型的 "水涨船高" 。
页: [1]
查看完整版本: jmp远转移绝对地址是怎么确定的