鹦鹉虚拟机/鹦鹉汇编语言
鹦鹉虚拟机 (PVM) 操作在一个特殊用途的字节码格式上。所有 PVM 中的指令都将转换为字节码指令,以供虚拟机操作。就像普通汇编语言与底层机器码指令之间存在一对一对应关系一样,鹦鹉字节码指令也与鹦鹉汇编语言 (PASM) 之间存在类似的对应关系。
PASM 与传统的汇编语言非常相似,不同之处在于指令提供了对鹦鹉系统许多动态和高级功能的访问。
在鹦鹉内部,存在许多不同的指令。一些指令只是彼此的变体,具有相同的行为,但参数不同。例如,存在用于以下操作的指令:
add_n_n_n
add_i_i_i
add_i_i_ic
add_n_n_nc
指令名称后面的字母指定了该指令需要哪种操作数。add_i_i_ic
接受一个整数 (i) 和一个整数常量 (ic),并返回一个整数 (i)。add_n_n_n
接受两个浮点数,并返回一个浮点数。
在 PASM 中,当您编写以下语句时
add $I0, $I1, $I2
鹦鹉将从列表中查找相应的指令 add_i_i_i
并调用它。用户看到了 1 条指令“add”,但鹦鹉实际上有多条指令,并自动为您决定使用哪条指令。如果您在鹦鹉中输入以下内容:
add $P0, $I1, $I2
您将收到一条错误消息,指出没有这样的指令 add_p_i_i
。这将有助于您调试程序。
鹦鹉是一个基于寄存器的虚拟机。存在不确定的数量的寄存器,不需要在调用之前实例化它们。虚拟机将确保在需要时创建寄存器,并根据需要重新排列它们。寄存器名称是词法作用域的,因此在一个函数中的寄存器“$P0”不一定与另一个函数中的寄存器“$P0”是相同的数据位置。
所有寄存器都以“$”符号开头。在“$”之后,称为“符号”,有一个字母表示寄存器的數據類型,后面是寄存器编号。共有 4 种数据项类型,每种类型都有一个唯一的寄存器字符标识符。它们分别是:
- 字符串
- 字符串寄存器以“S”开头。字符串寄存器可以命名为“$S0”或“$S100”等。
- 整数
- 整数寄存器以“I”开头。整数寄存器可以命名为“$I0”或“$I56”等。
- 数字
- 浮点数寄存器,可以存储浮点数的寄存器,以字母“N”开头。这些寄存器可以命名为“$N0”或“$N354”等。
- PMC
- PMC 是高级的面向对象的數據類型,PMC 寄存器可以用于存储多种不同类型的数据。PMC 寄存器以“P”标识符开头,可以命名为“$P0”或“$P35”等。
一个基本的 PASM 语句包含一个可选的标签,一个指令助记符和一系列逗号分隔的参数。以下是一个示例:
my_label: add_n $P0, $P1, $I1
在这个例子中,add_n 指令对两个寄存器进行加法运算,并将结果存储在第三个寄存器中。$P1 和 $I1 中的值相加,结果存储在 $P0 中。请注意,操作数的类型不同。其中一个参数和结果都是 PMC 寄存器,但第二个操作数是整数,add_n 指令是整数指令。鹦鹉将在执行此类指令时自动处理必要的數據類型转换。唯一的要求是能够在两种數據類型之间进行转换。如果可以,鹦鹉将处理细节。但是,在某些情况下,自动類型转换是不可能的,在这种情况下,鹦鹉将引发异常。
PASM 只有很少可用的指令。
- .pcc_sub
- 此指令定义了一个新子例程的开始。