· Blog  · 3 min read

How to design a virtual machine instruction set? - AQ

How to design a virtual machine instruction set? This article is a design proposal for the AQ virtual machine instruction set.

How to design a virtual machine instruction set? This article is a design proposal for the AQ virtual machine instruction set.

Introduction

How to design a virtual machine instruction set?
What instructions should be included in the instruction set?
This article is a design proposal for the AQ virtual machine instruction set.

Instructions

AQ虚拟机的指令集定义在AQ根目录的”/aqvm/interpreter/bytecode/opcode”。

您可以在Github查看本目录:https://github.com/aq-org/AQ/tree/main/aqvm/interpreter/bytecode/opcode

内含两个文件:

  1. opcode.h - AQ虚拟机指令集的枚举类型指令执行函数等声明
    源代码:https://github.com/aq-org/AQ/blob/main/aqvm/interpreter/bytecode/opcode/opcode.h
  2. opcode.c - AQ虚拟机指令集的指令执行函数的定义
    源代码:https://github.com/aq-org/AQ/blob/main/aqvm/interpreter/bytecode/opcode/opcode.c
  3. CMakeLists.txt - 编译指令集的CMake脚本
    源代码:https://github.com/aq-org/AQ/blob/main/aqvm/interpreter/bytecode/opcode/CMakeLists.txt
  4. 暂无…

由于C语言代码命名可能出现重复,因此AQ虚拟机的代码均以Aqvm开头,后加入文件路径等命名空间,用_区分前面的命名空间和后面的具体名称,例如:AqvmInterpreterBytecodeOpcode_Type

enum AqvmInterpreterBytecodeOpcode_Type {
  AqvmInterpreterBytecodeOpcodeType_NOP = 0x00,
  AqvmInterpreterBytecodeOpcodeType_LOAD,
  AqvmInterpreterBytecodeOpcodeType_STORE,
  AqvmInterpreterBytecodeOpcodeType_NEW,
  AqvmInterpreterBytecodeOpcodeType_FREE,
  AqvmInterpreterBytecodeOpcodeType_SIZE,
  AqvmInterpreterBytecodeOpcodeType_ADD,
  AqvmInterpreterBytecodeOpcodeType_SUB,
  AqvmInterpreterBytecodeOpcodeType_MUL,
  AqvmInterpreterBytecodeOpcodeType_DIV,
  AqvmInterpreterBytecodeOpcodeType_REM,
  AqvmInterpreterBytecodeOpcodeType_NEG,
  AqvmInterpreterBytecodeOpcodeType_SHL,
  AqvmInterpreterBytecodeOpcodeType_SHR,
  AqvmInterpreterBytecodeOpcodeType_SAR,
  AqvmInterpreterBytecodeOpcodeType_IF,
  AqvmInterpreterBytecodeOpcodeType_AND,
  AqvmInterpreterBytecodeOpcodeType_OR,
  AqvmInterpreterBytecodeOpcodeType_XOR,
  AqvmInterpreterBytecodeOpcodeType_CMP,
  AqvmInterpreterBytecodeOpcodeType_INVOKE,
  AqvmInterpreterBytecodeOpcodeType_RETURN,
  AqvmInterpreterBytecodeOpcodeType_GOTO,
  AqvmInterpreterBytecodeOpcodeType_THROW,
  AqvmInterpreterBytecodeOpcodeType_WIDE = 0xFF
};

以上是目前的AQ虚拟机指令集的全部指令,后续可能有所更改。
AQ虚拟机的字节码的操作符采用定长字节码,长度为1个字节。如果需要扩展操作符的长度,则采用WIDE指令。(目前且未来很长一段时间仍不需要使用)

AQ虚拟机的操作数采用变长字节码,操作数个数一般固定,但操作数的第一个字节是操作数长度,指定后续读取的操作数的长度。因此操作数的长度不固定。

以下是AQ虚拟机指令的解释:

指令名称16进制参数解释
NOP0x00空指令

Unfinished Business.

We are working hard on developing the AQ virtual machine. We would appreciate it if you could give us a star on Github. If you want to learn more or participate in the development work, please follow our official website: https://www.axa6.com and GitHub: https://github.com/aq-org/AQ.

This article is published under the AQ License: https://github.com/aq-org/AQ/blob/main/LICENSE. If needed, please adapt or reprint according to the AQ License.

Share:
Back to Blog

Related Posts

View All Posts »
AQ虚拟机的类型定义 - AQ

AQ虚拟机的类型定义 - AQ

由于不同的系统、硬件等外部条件对于内存有不同的支持和定义,因此为了使AQ虚拟机满足跨平台运行的要求,设计统一的类型标准是必不可少的。本文对于AQ虚拟机的类型进行了定义和规范,以确保在不同系统上的AQ虚拟机均能正常运行。

一种优秀的虚拟机内存架构 - AQ

一种优秀的虚拟机内存架构 - AQ

虚拟机内存架构直接影响虚拟机的性能和占用。设计一个优秀的架构可以有效提升性能和效率。本文将介绍AQ虚拟机使用的内存架构。

如何从零设计一门编程语言? - AQ

如何从零设计一门编程语言? - AQ

如何从零设计一门编程语言?新型的编程语言应该包括那些部分?本文章将通过AQ语言的设计,详述开发一个编程语言的过程,从零开始设计、开发编译器和相关基础设施,最终完成一门编程语言的构建。

关于AQ官方网站多语言支持的公告 - AQ

关于AQ官方网站多语言支持的公告 - AQ

由于AQ的开发工作日益增加,缺少专业翻译人员以及对于翻译效果不理想等原因,即日起,AQ官方网站多语言版本将暂停实时维护。仅保留英语和中文两种语言支持。