基于寄存器的虚拟机如何实现寄存器

时间:2014-06-04 19:17:30

标签: android dalvik vm-implementation parrot

基于寄存器的虚拟机如何实现寄存器。

我一直在阅读有关基于注册的虚拟机的大量在线信息,并且我已经看到int r[16];用作实现寄存器的方法。这就提出了一些问题,比如像这样的机器如何处理长或浮动?

Parrot和Dalvik都是基于注册的虚拟机。 Parrot声称它有一个寄存器窗口,允许无限数量的寄存器,dalvik支持多达65,536个寄存器。我想知道如何在这些虚拟机上实现寄存器

我希望看到实际实现的代码,因为我对它们如何能够存储不同的值以及它们是否是在操作码调用时创建或者它们是否始终存在感兴趣?

谢谢

1 个答案:

答案 0 :(得分:2)

在dalvik中,每个寄存器为32位宽。使用2个寄存器存储长/双值。实际的寄存器值在调用堆栈中“保持”,但可能暂时存在于实际的物理机器寄存器中。

寄存器数量的64k限制是由于dex文件中保存寄存器数量的字段大小,即16位。实际上,方法不需要那么多寄存器。

如果您想更深入地了解dalvik的工作原理,最好的资源就是源本身。例如,这里是portable C implementation of the "const" opcode,它将立即值存储到寄存器中。