# 第二代沙箱处理器(平坦版) **Repository Path**: sandbox-lang_tree/sandbox-2-flat ## Basic Information - **Project Name**: 第二代沙箱处理器(平坦版) - **Description**: 第二代“沙箱”虚拟处理器的平坦寻址版本 - **Primary Language**: Unknown - **License**: MPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-11-01 - **Last Updated**: 2023-11-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # “沙箱”虚拟处理器基本说明 “沙箱”虚拟处理器是作者自主设计、具备基本处理器功能的程序,本文档会简单介绍“沙箱”虚拟处理器的结构、指令集和使用方法。*请注意,当前版本为flat版,不支持gdt和ldt。* ## 结构和指令集 “沙箱”虚拟处理器分配了24个64bit整型寄存器、8个32bit浮点寄存器、8个64bit浮点寄存器和16个512bit向量寄存器,寄存器的标号参见standard.md。 “沙箱”虚拟处理器的指令集分为单字节、双字节、四字节和八字节四种,不同指令之间的长度不同,但是同一个指令的长度总是相同的。具体的指令请参见standard.md ## 汇编语言 “沙箱”虚拟处理器采用“Virtual A”汇编语言,这种语言类似于x86_64的汇编语言,但是具有自己的格式。 ### 基本格式 “Virtual A”汇编语言以代码段为单位,不同的代码段之间不应该嵌套,每个代码段都需要设置一个名称。段的起始标记是`SEGMENT `,结束标记是`SEGMENT END`。起始标记需要声明代码段的类型(`TYPE`)和名称(`NAME`),这个名字不应当在任何一个段的内部重新声明。段内可以声明并使用标记,也可以在不同的段之间引用标记。声明一个数据标记的语法是` `,声明一个代码标记需要使用`LABEL `开始,并使用`LABEL END`结束。**注意,任何标记都需要事先声明才能使用!** 在代码标记行,你可以使用`SEGMENT ,ORG `和`LABEL ,ORG `语句设置代码段或者标记的内存虚拟地址。 如果你只是普通使用者,到这里就足够了。接下来的内容是为虚拟机制作者和面向二进制的开发者提供的。 ### 二进制格式 “Virtual A”汇编语言的二进制文件也是由不同的段组成的。为了使二进制文件可以被载入到正确的位置,二进制文件分为三个部分,即文件头、程序段表和程序二进制内容。 文件头内容总计24字节,包括魔数“sandbox\x20”(8byte)、程序入口地址(8byte,默认为零)、段数量(4字节)和文件大小(4字节)。程序段表从32字节开始,结构为type(2byte)、size(2byte)、fbegin(4byte)、entry(8byte),分别确认了段的类型、大小、文件起始位置和内存入口。