Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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 为什么编译程序使用间接跳转指令来编译程序集?_Assembly_Compiler Construction_Reverse Engineering_Disassembly - Fatal编程技术网

Assembly 为什么编译程序使用间接跳转指令来编译程序集?

Assembly 为什么编译程序使用间接跳转指令来编译程序集?,assembly,compiler-construction,reverse-engineering,disassembly,Assembly,Compiler Construction,Reverse Engineering,Disassembly,为什么编译器使用间接跳转指令将代码翻译成汇编x86? 例如: . jmp eax 或 哪些编译器使用间接跳转? 我们如何实现间接跳跃的最终目标 请举例说明。 谢谢。如果您有一个大的switch语句,如: 开关(expr) { 案例0:{做点什么;打断;} 案例1:{break;} 案例2:{做点别的;} 案例3:{做事;休息;} 默认值:{在大多数情况下执行操作;中断;} 案例255:{现在是完全不同的;} } 编译器可以使用间接跳转来实现它。但是,如果switch语句足够简单,或者不太适合跳

为什么编译器使用间接跳转指令将代码翻译成汇编
x86
? 例如:

.
jmp eax

哪些编译器使用间接跳转? 我们如何实现间接跳跃的最终目标

请举例说明。
谢谢。

如果您有一个大的switch语句,如:

开关(expr)
{
案例0:{做点什么;打断;}
案例1:{break;}
案例2:{做点别的;}
案例3:{做事;休息;}
默认值:{在大多数情况下执行操作;中断;}
案例255:{现在是完全不同的;}
}


编译器可以使用间接跳转来实现它。但是,如果switch语句足够简单,或者不太适合跳转表,编译器可能会使用多个分支。

可能是我太累了,但我发现您的问题有点难以理解。你能提供一个更具体的例子和/或解释为什么这对你很重要吗?在编译器生成的汇编代码中绘制CFG图。为什么你觉得需要使用间接跳转。你认为间接跳转会给你什么,而其他形式不会?您可能需要在组装时手动完成此操作。
jmp [eax*4+ebx]