Index: trunk/abdev/BasicCompiler32/Compile_Func.cpp
===================================================================
--- trunk/abdev/BasicCompiler32/Compile_Func.cpp	(revision 355)
+++ trunk/abdev/BasicCompiler32/Compile_Func.cpp	(revision 357)
@@ -18,4 +18,6 @@
 	if( lstrcmpi( FuncName, "__delegate_dynamicmethod_call" ) == 0 )	return FUNC_DELEGATE_DYNAMICMETHOD_CALL;
 	if( lstrcmpi( FuncName, "__delegate_staticmethod_call" ) == 0 )		return FUNC_DELEGATE_STATICMETHOD_CALL;
+	if( lstrcmpi( FuncName, "_System_GetNowScopeCatchAddresses" ) == 0 )return FUNC_SYSTEM_GET_NOW_SCOPE_CATCH_ADDRESS;
+	if( lstrcmpi( FuncName, "_System_GetBp" ) == 0 )	return FUNC_SYSTEM_GET_BP;
 	if( lstrcmpi( FuncName, "GetDouble" ) == 0 )		return FUNC_GETDOUBLE;
 	if( lstrcmpi( FuncName, "GetSingle" ) == 0 )		return FUNC_GETSINGLE;
@@ -575,4 +577,9 @@
 	resultType = UserProc::CompilingUserProc().ReturnType();
 }
+void Opcode_Func_System_Get_Bp()
+{
+	//mov eax,ebp
+	compiler.codeGenerator.op_mov_RR(REG_EAX,REG_EBP);
+}
 
 void Opcode_Func_GetPtrData(const char *Parameter,const int type){
@@ -670,4 +677,12 @@
 			Opcode_Func_delegate_call( Parameter, resultType, false, isCallOn );
 			break;
+		case FUNC_SYSTEM_GET_NOW_SCOPE_CATCH_ADDRESS:
+			if( isCallOn ) Exception::Opcode_Func_System_GetNowScopeCatchAddress();
+			resultType.SetBasicType( DEF_LONG );
+			break;
+		case FUNC_SYSTEM_GET_BP:
+			if( isCallOn ) Opcode_Func_System_Get_Bp();
+			resultType.SetBasicType( DEF_LONG );
+			break;
 
 		case FUNC_GETDOUBLE:
Index: trunk/abdev/BasicCompiler32/FunctionValue.h
===================================================================
--- trunk/abdev/BasicCompiler32/FunctionValue.h	(revision 355)
+++ trunk/abdev/BasicCompiler32/FunctionValue.h	(revision 357)
@@ -17,4 +17,6 @@
 #define FUNC_DELEGATE_DYNAMICMETHOD_CALL	0x0621
 #define FUNC_DELEGATE_STATICMETHOD_CALL		0x0622
+#define FUNC_SYSTEM_GET_NOW_SCOPE_CATCH_ADDRESS	0x0623
+#define FUNC_SYSTEM_GET_BP	0x0624
 
 //ポインタ
Index: trunk/abdev/BasicCompiler32/MakePeHdr.cpp
===================================================================
--- trunk/abdev/BasicCompiler32/MakePeHdr.cpp	(revision 355)
+++ trunk/abdev/BasicCompiler32/MakePeHdr.cpp	(revision 357)
@@ -1079,4 +1079,5 @@
 	compiler.linker.SetImageBase( ImageBase );
 	compiler.linker.ResolveDataTableSchedules( MemPos_DataSection );
+	compiler.linker.ResolveCatchAddressSchedules( MemPos_CodeSection );
 	compiler.linker.ResolveDllProcSchedules( MemPos_CodeSection, MemPos_ImportSection, LookupSize, HintSize );
 	compiler.linker.ResolveUserProcSchedules( MemPos_CodeSection );
Index: trunk/abdev/BasicCompiler32/x86CodeGenerator.cpp
===================================================================
--- trunk/abdev/BasicCompiler32/x86CodeGenerator.cpp	(revision 355)
+++ trunk/abdev/BasicCompiler32/x86CodeGenerator.cpp	(revision 357)
@@ -175,5 +175,5 @@
 	return pPertialSchedule;
 }
-void CodeGenerator::op_mov_RV(int reg,long offset, Schedule::Type scheduleType ){
+const PertialSchedule *CodeGenerator::op_mov_RV(int reg,long offset, Schedule::Type scheduleType, bool isPertialSchedule ){
 	//mov reg,value
 
@@ -182,5 +182,13 @@
 
 	//DISP32
+	const PertialSchedule *pPertialSchedule = NULL;
+	if( isPertialSchedule )
+	{
+		pertialSchedules.push_back( new PertialSchedule( pNativeCode->GetSize(), sizeof(long) ) );
+		pPertialSchedule = pertialSchedules.back();
+	}
 	pNativeCode->PutEx( offset, scheduleType );
+
+	return pPertialSchedule;
 }
 void CodeGenerator::op_mov_RR(int reg1,int reg2){
