当前位置:  技术问答>linux和unix

如何理解jmp指令?

    来源: 互联网  发布时间:2016-10-11

    本文导语:  google之后发现这个jmp指令是相对跳转的,但是为什么汇编代码 _asm{ _emit   0xe9; _emit   0x34; _emit   0x7e; _emit   0x08; _emit   0x00; _emit   0x90; }是 不是代表0047EB17     JMP         0x00087E3490 而是代表0047EB17   ...

google之后发现这个jmp指令是相对跳转的,但是为什么汇编代码
_asm{
_emit   0xe9;
_emit   0x34;
_emit   0x7e;
_emit   0x08;
_emit   0x00;
_emit   0x90;
}是
不是代表0047EB17     JMP         0x00087E3490
而是代表0047EB17     JMP         00506950( 90h   是   nop   指令)呢?
网上介绍说这是因为设指令中E9之后的整数(跳转的偏移量)为X
那么有: 0047EB17   +   5   +   X   =   00506950 
可以求得:   X   =   00087E34

如果以上解释正确,是不是说明这个相对跳转的指令 0xe9被翻译成汇编时是以绝对跳转的JMP指令形式出现的呢?

|

我想了一下。可能是误导你了。后4个字节应该是偏移。你给出的公式是对的。

0047EB17 + 5 + X = 00506950

目标地址 = EIP + rel32
而EIP是指令所在地址+指令长度。
rel32在这里就是00087E34H

|

0xe9 就是jmp的opcode呀。是相对跳转。

这个要这样理解。相对跳转应该是段内的跳转。然而,现在的操作系统将段的范围设定为,就是0~0xffffffff。因此,0xe9这个相对跳转的范围就不是以前,8086的64K内了。很好理解的嘛。

0xe9这条指令,5个字节。后4个字节组成32位的地址。因此,区分出0x90不是这个指令的一部分,而是单独的nop指令。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • DirectDraw:lpitch的理解
  • 分布式系统的故障独立性如何理解
  • 对TCP协议状态及状态转换理解
  • 套接字应该怎么理解
  • c/c++内存堆分配和栈分配理解
  • 如何理解fork函数返回2次啊?
  • 请问下面一句话应该怎样理解?
  • 句柄?句柄?“句柄”到底是什么东西?怎样理解?
  • unsigned char modeflags :5;是如何来理解?
  • 问一个《深入理解计算机系统》中的问题
  • 深度理解try{}cathc(){}
  • 深入理解PHP内核 TIPI
  • 求最容易理解,最容易上手的java书籍,servlet书籍,请指教,谢谢!!
  • 在JTree中的USEROBJECT有什么用处,我一直不理解?
  • 如何理解ResourceBundle和Locale?和应用的场合?谢谢
  • 100分求:哪儿有《深入理解linux内核》可供下哉!
  • System.gc();怎么理解?
  • system.map文件的作用和理解
  • sembuf.sem_num到底如何理解?--初学者向各位请教
  • 如何准确理解“程序”、“进程”、“线程”这三个概念
  • makefile这句话应该则怎么理解


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3