装配说明的裸骨

时间:2014-01-25 15:57:01

标签: assembly compiler-construction intermediate-language

我想知道以下内容:

是否可以创建一小组装配说明,它们可以一起完成所有操作? 或者mayby以不同的方式询问有关任何架构的必备组件说明是什么? (例如,跳转和添加将是必要的事情)

我希望你们能帮助我!

提供一些背景信息!:我正在尝试为我的编译器设计一个中间语言,并且我想尽可能少地使用指令(后来这些指令可以替代一个复杂指令)特定体系结构)但当然IL本身应该是可移植的。

2 个答案:

答案 0 :(得分:2)

最低为one instruction,甚至在carbone nanotube computerMAXQ chip

中实际实施

虽然只有一个是足够的,但实际上它比你想象的要复杂得多,而且往往需要更多的指导才能做同样的工作。如果您需要芯片的速度“可用”,那么IMO应该至少有一些共同的指令:

  • 1条件跳转指令:跳转等于(或不等于)
  • 1个关于算术的SUB指令。这样,您可以轻松地进行加法和减法,而无需使用否定指令
  • 1位指令:NAND(或NOR),其中一个可以执行任何逻辑操作
  • 1 MOV指令
  • 1次加载/存储指令

使用子指令或按位指令,您可以执行移动数据,因此取决于您的体系结构和操作码大小,您可以移除MOV或加载/存储以进一步简化它。

答案 1 :(得分:1)

我认为你想要相反。你想要一个非常富有表现力的IL,而不是制作一个尽可能简单的IL。 IL越具有表现力,就越容易针对特定架构进行优化。

将复杂的IL操作扩展为许多单独的指令比将许多简单的IL操作合并到复杂的指令中更容易。您可能不会需要乘法,因为它可以通过跳转和添加指令来完成。但是当你为具有硬件乘法的芯片进行编译时,你必须分析IL以确定这是一个“添加循环”并将其转换回乘法。这比宣传更多,并说“嗯,这个架构不能做到这一点,我想我们必须让它成为一个加法循环。”

另一个例子,您可能认为您的IL不需要浮点运算,因为一些ARM芯片无论如何都必须在软件中执行浮点运算。但是一些ARM芯片不必这样做,如果你的IL不支持FP操作,那么你需要将复杂的软件FP IL转换回单个硬件指令。

最好将IL与最先进和最复杂的硬件功能相匹配,然后在没有它们的处理器上“回退”到这些功能的“软件仿真”。