2013-04-10 11 views
0

我想立即跳转(以提高性能),而不是调用新函数或创建跳转表。我不知道为什么这个代码工作在我的编译器,但它不能正常跳:为什么我的程序在执行间接跳转时崩溃?

__asm mov eax, __cmd 
__asm jmp eax //Crash! 

__cmd : 
//Some code 

我试了第二种方法,它还会编译但不工作:

int address = 10; 
__asm jmp (__cmd + address) //Crash! 

__cmd : 
var += value;return; 
var -= value;return; 
var *= value;return; 
var /= value;return; 
var %= value;return; 

但是,只有它使用常量:

__asm jmp (__cmd + 10) //works 

为什么我的程序在执行间接跳转时崩溃?无论如何要解决这个问题吗?

+5

也许你需要写'mov eax,offset __cmd'?我强烈建议不要做你在做的事情。你很可能会优化错误的东西,而且只会遇到很多麻烦。 – 2013-04-10 10:55:24

+0

@Alexey Frunze我尽我所能,不惜一切代价提高性能,是的实施它是相当危险的,但它不是错误的事情。因为至少我必须处理我的19个运营商总数。事实上,它减少了我执行时间的1/8。 :) – xersi 2013-04-10 13:16:51

回答

0

谢谢Alexey Frunze。我找到了答案:

mov eax, offset __cmd 

它解决了我的问题。现在我可以间接跳转。 感谢您的阅读。 :)

相关问题