⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vmbasic.h

📁 编译原理 一本关于编译原理的经典教材
💻 H
字号:
#ifndef _VM_BASIC_
#define _VM_BASIC_

#include "BasicType.h"


/*
机器模型:
寄存器: PC,SP,FLAG,
STACK:16K
HEAP: unlimited

指令:
	Mov A,B; A,B is addresses : A = B
	Set A,100; A is address : A = 100

	Add A,B,C; A = C + B;
	Sub A,B,C; A = B - C;
	Mul A,B,C; A = C * B;
	Div A,B,C; A = B / C;
	AND A,B,C; A = B & C;
	OR  A,B,C; A = B | C;

	INC A; A++;
	DEC A; A--;
	NEG A; A = -A;

	TEST_EQ A,B,FLAG;  FLAG = (A == B)
	TEST_BG A,B,FLAG;  FLAG = (A > B)
	TEST_LG A,B,FLAG;  FLAG = (A < B)
	TEST_BEG A,B,FLAG;  FLAG = (A >= B)
	TEST_LEG A,B,FLAG;  FLAG = (A <= B)

	JMP Addr ; PC = Addr
	JZ	Addr Flag; if(Flag == 0) PC = Addr;
	JNZ Addr Flag; if(Flag == 0) PC = Addr;
	CALL Addr ; PC = Addr

	PUSH A ; [SP] = A; SP++;
	POP A; A = [SP]; SP--;
	
	NEW 10; new 10bytes
	DELETE; delete[]
*/

#define MAX_STACK_SIZE 16000

enum EInstruct
{
	E_MOV = 0,
	E_SET,

	E_ADD,
	E_SUB,
	E_MUL,
	E_DIV,
	E_AND,
	E_OR,

	E_MOVF,// float operation
	E_SETF,

	E_ADDF,
	E_SUBF,
	E_MULF,
	E_DIVF,

	E_INC,
	E_DEC,
	E_NEG,
	
	E_TEQ,
	E_TBG,
	E_TLG,
	E_TBEG,
	E_TLEG,

	E_TEQF,
	E_TBGF,
	E_TLGF,
	E_TBEGF,
	E_TLEGF,

	E_JMP,
	E_JZ,
	E_JNZ,
	E_CALL,
	E_RET,
	E_END,
	E_NOP,

	E_PUSH,
	E_POP,
	E_PUSHA,// push sp,pc


	E_NEW,
	E_DELETE,
};

enum EErrorType
{
	E_OK,
	E_FALSE,
};


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -