diff Bison-Flex/BasicCompiler-MemoryBase/vm.cpp @ 4:805d39d28230

add Compiler-stackbase
author nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 17 May 2011 08:00:38 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Bison-Flex/BasicCompiler-MemoryBase/vm.cpp	Tue May 17 08:00:38 2011 +0900
@@ -0,0 +1,35 @@
+//
+// 仮想CPU
+//
+//	switch-caseでの実装例
+//
+//		(c)2007 Chihiro.SAKAMOTO HyperWorks
+//
+#include <exception>
+#include "vm.h"
+
+// 実行
+int vm::vcpu::run()
+{
+	command_ = data_.command_;						// プログラム格納位置
+	command_size_ = data_.command_size_;			// プログラムの大きさ
+
+	global_value.resize(data_.value_size_);			// 外部変数テーブル確保
+	command_ptr_ = command_;						// プログラムカウンター初期化
+
+	try {
+		while (*command_ptr_ != VM_HALT) {			// Haltするまでループ
+			int op = *command_ptr_++;
+			switch (op) {
+				#define	VM_SWITCHTABLE
+				#include "vm_code.h"
+				#undef	VM_SWITCHTABLE
+			} ;
+		}
+	}
+	catch (const std::exception &e) {
+		std::cerr << "例外発生(" << e.what() << ")" << std::endl;
+		return -1;
+	}
+	return 0;
+}