初学者有关问题:什么编译器能直接编译 call 400000 呢

菜鸟问题:什么编译器能直接编译 call 400000 呢!
本帖最后由 mywmshow 于 2012-11-13 09:10:19 编辑
我用Masm.exe编译,好像只能用寄存器过渡
mov eax,400000
call eax
什么编译器能直接编译 call 400000 呢!

------解决方案--------------------
call  eax,400000 通常随该指令的位置而不同的,因为机器码里的是相对偏移而非直接的目标地址 400000 ,所以从简单可靠性上来说,通过 eax 这样的中转是更好的方法,或者将 400000 压栈再 ret 。直接的目的地址的 call 只支持 call m16:32 模式,即带段址的 far call 。
------解决方案--------------------
你可以尝试gcc内嵌汇编:

__asm__ __volatile__("call 0x400000");

不过要加修正系数,搞这个没意义。