Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 跳远和跳远的区别(x86)_Assembly_X86_Cpu_Instructions_Machine Instruction - Fatal编程技术网

Assembly 跳远和跳远的区别(x86)

Assembly 跳远和跳远的区别(x86),assembly,x86,cpu,instructions,machine-instruction,Assembly,X86,Cpu,Instructions,Machine Instruction,我已经读到,当地址中的相对跳转小于124时,应使用短跳转,否则应使用长跳转 x86上两种类型的跳转在CPU/性能方面执行的操作有什么区别?实际上有三种类型的JMP指令;短、近、远(长) 简短的JMP是您所指的相对JMP。它被编码为两个字节;相对于当前IP的实际JMP和字节数+/- 近跳转允许您在当前“段”(使用实模式术语)或CS选择器中当前选定的内存区域内跳转 长或远JMP还包括选择器(或实模式下的段) 你可以自己查一下时间。与时间相关的最大差异是由于完成JMP所需读取的字节数不同而造成的,您找

我已经读到,当地址中的相对跳转小于124时,应使用短跳转,否则应使用长跳转


x86上两种类型的跳转在CPU/性能方面执行的操作有什么区别?

实际上有三种类型的
JMP
指令;短、近、远(长)

简短的
JMP
是您所指的相对
JMP
。它被编码为两个字节;相对于当前IP的实际
JMP
和字节数+/-

近跳转允许您在当前“段”(使用实模式术语)或CS选择器中当前选定的内存区域内跳转

长或远
JMP
还包括选择器(或实模式下的段)


你可以自己查一下时间。与时间相关的最大差异是由于完成
JMP

所需读取的字节数不同而造成的,您找不到任何关于这一文档非常丰富的CPU的单独指令的文档?可以找到英特尔手册(PDF警告)。查看第2A卷中的3-440,它详细描述了JMP。在同一文档中介绍了近跳转和远跳转。你可以衡量的绩效差异,或者是指那些努力工作的人,例如…@Jongware我真的不能。谢谢你,迈克尔。由于我找不到文件,如果你能告诉我你在哪里找的话,我将不胜感激,以便以后我能自己找到。我的意思是,你是怎么知道答案在那里的?短跳转可以节省指令长度。这个选择器是什么,这个选择器是如何实现的?据我所知,在跳远中,我只是提供了一个地址。地址由选择器和偏移量组成。如CS:1234。CS用于在保护模式下定义GDT或LDT之外的选择器。它通常非常小,特别是与实模式分段内存相比,因为它只是从表中选择一个条目,而不是定义一个实际的内存地址。内存地址是在GDT/LDT中定义的。我应该补充一点,无论您处于实模式还是保护模式,它实际上看起来都是一样的。。。实际值在引擎盖下是不同的,设置GDT的前期工作也是不同的(在实模式下不需要,因为您使用的是分段内存)