Parrot - 寄存器

当前的 Perl 5 虚拟机是一个堆栈机。 它通过将操作保存在堆栈上来在操作之间传递值。 操作将值加载到堆栈中,执行所需的操作并将结果放回堆栈中。 这很容易使用,但速度很慢。

要将两个数字相加,您需要执行三次入栈和两次出栈。 更糟糕的是,堆栈必须在运行时增长,这意味着在您不想分配内存时才分配内存。

所以 Parrot 将打破虚拟机的既定传统,并使用寄存器架构,更类似于真实硬件 CPU 的架构。 这还有另一个优点。 我们可以使用所有关于如何为我们的软件 CPU 编写基于寄存器的 CPU 的编译器和优化器的现有文献!

Parrot 每种类型都有专门的寄存器:32 个 IV 寄存器、32 个 NV 寄存器、32 个字符串寄存器和 32 个 PMC 寄存器。 在 Parrot 汇编器中,它们分别命名为 I1...I32、N1...N32、S1...S32、P1...P32。

现在让我们看一些汇编程序。 我们可以使用设置运算符设置这些寄存器:

   set I1, 10
   set N1, 3.1415
   set S1, "Hello, Parrot"

所有 Parrot 操作都具有相同的格式:操作符名称、目标寄存器,然后是操作数。