Index: /trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp	(revision 240)
+++ /trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp	(revision 241)
@@ -443,6 +443,5 @@
 
 	//Continueアドレスを初期化
-	extern DWORD dwContinueAddress;
-	dwContinueAddress=-1;
+	compiler.codeGenerator.ClearContinueArea();
 
 	if(bDebugCompile&&bDebugSupportProc==0){
Index: /trunk/abdev/BasicCompiler32/Compile_Statement.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/Compile_Statement.cpp	(revision 240)
+++ /trunk/abdev/BasicCompiler32/Compile_Statement.cpp	(revision 241)
@@ -126,5 +126,5 @@
 
 void OpcodeIf(char *Parameter){
-	int i,i2,i3,i4;
+	int i,i2;
 	Type tempType;
 
@@ -140,7 +140,7 @@
 	}
 
+	CodeGenerator::PertialSchedule *pIfPertialSchedule = NULL;
 	if( !NumOpe(Parameter,Type(),tempType) ){
 		//NumOpe内でエラー
-		i3=-1;	//ダミー
 	}
 	else if( tempType.IsDouble() ){
@@ -167,10 +167,5 @@
 
 		//jne (endif、または else まで)
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x85;
-		obp+=sizeof(long);
-
-		//jneの番地
-		i3=obp;
+		pIfPertialSchedule = compiler.codeGenerator.op_jne( 0, sizeof(long), true );
 	}
 	else if( tempType.IsSingle() ){
@@ -197,10 +192,5 @@
 
 		//jne (endif、または else まで)
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x85;
-		obp+=sizeof(long);
-
-		//jneの番地
-		i3=obp;
+		pIfPertialSchedule = compiler.codeGenerator.op_jne( 0, sizeof(long), true );
 	}
 	else if( tempType.Is64() ){
@@ -217,9 +207,5 @@
 
 		//jne
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x85;
-		obp+=sizeof(long);
-		i3=obp;
-
+		CodeGenerator::PertialSchedule *pTempPertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 
 		//cmp ebx,0
@@ -227,20 +213,11 @@
 
 		//jne
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x85;
-		obp+=sizeof(long);
-		i4=obp;
-
-
+		CodeGenerator::PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 
 		//jmp (endif、または else までジャンプ)
-		OpBuffer[obp++]=(char)0xE9;
-		obp+=sizeof(long);
-
-		*((long *)(OpBuffer+i3-sizeof(long)))=obp-i3;
-		*((long *)(OpBuffer+i4-sizeof(long)))=obp-i4;
-
-		//jmpの番地
-		i3=obp;
+		pIfPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );
+
+		compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule1 );
+		compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule2 );
 	}
 	else{
@@ -254,10 +231,5 @@
 
 		//je (endif、または else まで条件ジャンプ)
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x84;
-		obp+=sizeof(long);
-
-		//jeの番地
-		i3=obp;
+		pIfPertialSchedule = compiler.codeGenerator.op_je( 0, sizeof(long), true );
 	}
 
@@ -276,14 +248,11 @@
 
 
-	if(i3==-1) return;
+	if( pIfPertialSchedule == NULL ) return;
 
 	if(i2==ESC_ELSE){
 		//jmp (endifまで)
-		OpBuffer[obp++]=(char)0xE9;
-		obp+=sizeof(long);
-
-		*((long *)(OpBuffer+i3-sizeof(long)))=obp-i3;	//ifからelseへのジャンプ先のオフセット値
-
-		i3=obp;
+		CodeGenerator::PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );
+
+		compiler.codeGenerator.opfix_JmpPertialSchedule( pIfPertialSchedule );
 
 
@@ -301,8 +270,8 @@
 
 
-		*((long *)(OpBuffer+i3-sizeof(long)))=obp-i3;	//jmpジャンプ先のオフセット値
+		compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule );
 	}
 	else{
-		*((long *)(OpBuffer+i3-sizeof(long)))=obp-i3;	//jeジャンプ先のオフセット値
+		compiler.codeGenerator.opfix_JmpPertialSchedule( pIfPertialSchedule );
 	}
 }
@@ -371,19 +340,14 @@
 void OpcodeWhile(char *Parameter){
 	extern HANDLE hHeap;
-	int i2,i3 = 0;
 
 	//Continueアドレスのバックアップとセット
-	extern DWORD dwContinueAddress;
-	DWORD dwTempContinue;
-	dwTempContinue=dwContinueAddress;
-	dwContinueAddress=obp;
+	compiler.codeGenerator.ContinueAreaBegin();
 
 	if(!Parameter[0]) SetError(10,"While",cp);
 
-	int je_schedule;
+	CodeGenerator::PertialSchedule *pWhilePertialSchedule = NULL;
 	Type tempType;
 	if( !NumOpe(Parameter,Type(),tempType) ){
 		//ダミー
-		i3=-1;
 	}
 	else if( tempType.IsDouble() ){
@@ -410,10 +374,5 @@
 
 		//jne (Wend まで)
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x85;
-		obp+=sizeof(long);
-
-		//jeの番地
-		je_schedule=obp;
+		pWhilePertialSchedule = compiler.codeGenerator.op_jne( 0, sizeof(long), true );
 	}
 	else if( tempType.IsSingle() ){
@@ -436,14 +395,9 @@
 		compiler.codeGenerator.op_fnstsw_ax();
 
-		//test ah,40
+		//test ah,40h
 		compiler.codeGenerator.op_test_ah( (char)0x40 );
 
 		//jne (Wend まで)
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x85;
-		obp+=sizeof(long);
-
-		//jeの番地
-		je_schedule=obp;
+		pWhilePertialSchedule = compiler.codeGenerator.op_jne( 0, sizeof(long), true );
 	}
 	else if( tempType.Is64() ){
@@ -460,9 +414,5 @@
 
 		//jne
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x85;
-		obp+=sizeof(long);
-		i2=obp;
-
+		CodeGenerator::PertialSchedule *pTempPertialSchedule1 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 
 		//cmp ebx,0
@@ -470,19 +420,11 @@
 
 		//jne
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x85;
-		obp+=sizeof(long);
-		i3=obp;
-
-
-		//jmp (endif、または else までジャンプ)
-		OpBuffer[obp++]=(char)0xE9;
-		obp+=sizeof(long);
-
-		*((long *)(OpBuffer+i2-sizeof(long)))=obp-i2;
-		*((long *)(OpBuffer+i3-sizeof(long)))=obp-i3;
-
-		//jmpの番地
-		je_schedule=obp;
+		CodeGenerator::PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
+
+		//jmp (Wendまでジャンプ)
+		pWhilePertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );
+
+		compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule1 );
+		compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule2 );
 	}
 	else{
@@ -496,10 +438,5 @@
 
 		//je (Wend まで)
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x84;
-		obp+=sizeof(long);
-
-		//実行中の番地
-		je_schedule=obp;
+		pWhilePertialSchedule = compiler.codeGenerator.op_je( 0, sizeof(long), true );
 	}
 
@@ -512,20 +449,16 @@
 	GetLexicalScopes().CallDestructorsOfScopeEnd();
 
-	if( i3 == -1 ){
-		return;
-	}
-
 	//jmp ...
-	OpBuffer[obp++]=(char)0xE9;
-	*((long *)(OpBuffer+obp))=dwContinueAddress-(obp+sizeof(long));
-	obp+=sizeof(long);
+	compiler.codeGenerator.op_jmp_continue();
 
 	//レキシカルスコープをレベルダウン
 	GetLexicalScopes().End();
 
-	*((long *)(OpBuffer+je_schedule-sizeof(long)))=obp-je_schedule;	//jeジャンプ先のオフセット値
-
-	//Continueアドレスを復元
-	dwContinueAddress=dwTempContinue;
+	if( pWhilePertialSchedule )
+	{
+		compiler.codeGenerator.opfix_JmpPertialSchedule( pWhilePertialSchedule );
+	}
+
+	compiler.codeGenerator.ContinueAreaEnd();
 }
 
@@ -533,5 +466,5 @@
 void OpcodeFor(char *Parameter){
 	extern HANDLE hHeap;
-	int i,i2,i3;
+	int i,i2;
 	char temporary[VN_SIZE],variable[VN_SIZE],JudgeNum[VN_SIZE],StepNum[VN_SIZE];
 
@@ -559,13 +492,8 @@
 
 	//jmp ...
-	OpBuffer[obp++]=(char)0xE9;
-	i2=obp;
-	obp+=sizeof(long);
+	CodeGenerator::PertialSchedule *pTempPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );
 
 	//Continueアドレスのバックアップとセット
-	extern DWORD dwContinueAddress;
-	DWORD dwTempContinue;
-	dwTempContinue=dwContinueAddress;
-	dwContinueAddress=obp;
+	compiler.codeGenerator.ContinueAreaBegin();
 
 	//第２パラメータを取得（to～）
@@ -583,5 +511,5 @@
 	OpcodeCalc(temporary);
 
-	*((long *)(OpBuffer+i2))=obp-(i2+sizeof(long));
+	compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule );
 
 	//増加か減少かを区別する
@@ -596,8 +524,5 @@
 
 	//je [カウンタ減少の場合の判定]
-	OpBuffer[obp++]=(char)0x0F;
-	OpBuffer[obp++]=(char)0x84;
-	i2=obp;
-	obp+=sizeof(long);
+	pTempPertialSchedule = compiler.codeGenerator.op_je( 0, sizeof(long), true );
 
 	//判定（カウンタ増加の場合）
@@ -609,9 +534,8 @@
 
 	//jmp [カウンタ減少の場合の判定を飛び越す]
-	OpBuffer[obp++]=(char)0xE9;
-	i3=obp;
-	obp+=sizeof(long);
-
-	*((long *)(OpBuffer+i2))=obp-(i2+sizeof(long)); //jeジャンプ先のオフセット値
+	CodeGenerator::PertialSchedule *pTempPertialSchedule2 = compiler.codeGenerator.op_jmp( 0, sizeof(long), true );
+
+	//jeジャンプ先のオフセット値
+	compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule );
 
 	//判定（カウンタ減少の場合）
@@ -622,5 +546,6 @@
 	compiler.codeGenerator.op_pop(REG_EAX);
 
-	*((long *)(OpBuffer+i3))=obp-(i3+sizeof(long)); //jmpジャンプ先のオフセット値
+	//jmpジャンプ先のオフセット値
+	compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule2 );
 
 	//cmp eax,0
@@ -630,8 +555,5 @@
 
 	//je ...
-	OpBuffer[obp++]=(char)0x0F;
-	OpBuffer[obp++]=(char)0x84;
-	int je_schedule=obp;
-	obp+=sizeof(long);
+	pTempPertialSchedule = compiler.codeGenerator.op_je( 0, sizeof(long), true );
 
 	//レキシカルスコープをレベルアップ
@@ -650,15 +572,14 @@
 
 	//jmp ...
-	OpBuffer[obp++]=(char)0xE9;
-	*((long *)(OpBuffer+obp))=dwContinueAddress-(obp+sizeof(long));
-	obp+=sizeof(long);
+	compiler.codeGenerator.op_jmp_continue();
 
 	//レキシカルスコープをレベルダウン
 	GetLexicalScopes().End();
 
-	*((long *)(OpBuffer+je_schedule))=obp-(je_schedule+sizeof(long)); //jeジャンプ先のオフセット値
+	//jeジャンプ先のオフセット値
+	compiler.codeGenerator.opfix_JmpPertialSchedule( pTempPertialSchedule );
 
 	//Continueアドレスを復元
-	dwContinueAddress=dwTempContinue;
+	compiler.codeGenerator.ContinueAreaEnd();
 }
 
@@ -670,8 +591,5 @@
 
 	//Continueアドレスのバックアップとセット
-	extern DWORD dwContinueAddress;
-	DWORD dwTempContinue;
-	dwTempContinue=dwContinueAddress;
-	dwContinueAddress=obp;
+	compiler.codeGenerator.ContinueAreaBegin();
 
 	//レキシカルスコープをレベルアップ
@@ -682,4 +600,6 @@
 
 	GetLexicalScopes().CallDestructorsOfScopeEnd();
+
+	CodeGenerator::PertialSchedule *pDoPertialSchedule = NULL;
 
 	extern char *basbuf;
@@ -731,6 +651,5 @@
 
 					//jne 5（ループ終了）
-					OpBuffer[obp++]=(char)0x75;
-					OpBuffer[obp++]=(char)0x05;
+					pDoPertialSchedule = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 				}
 				else if(basbuf[i3]=='1'){
@@ -738,6 +657,5 @@
 
 					//je 5（ループ終了）
-					OpBuffer[obp++]=(char)0x74;
-					OpBuffer[obp++]=(char)0x05;
+					pDoPertialSchedule = compiler.codeGenerator.op_je( 0, sizeof(char), true );
 				}
 			}
@@ -768,6 +686,5 @@
 
 					//jne 5（ループ終了）
-					OpBuffer[obp++]=(char)0x75;
-					OpBuffer[obp++]=(char)0x05;
+					pDoPertialSchedule = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 				}
 				else if(basbuf[i3]=='1'){
@@ -775,6 +692,5 @@
 
 					//je 5（ループ終了）
-					OpBuffer[obp++]=(char)0x74;
-					OpBuffer[obp++]=(char)0x05;
+					pDoPertialSchedule = compiler.codeGenerator.op_je( 0, sizeof(char), true );
 				}
 			}
@@ -812,6 +728,5 @@
 
 					//jmp 5（ループ終了）
-					OpBuffer[obp++]=(char)0xEB;
-					OpBuffer[obp++]=(char)0x05;
+					pDoPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(char), true );
 
 					*((long *)(OpBuffer+i2-sizeof(long)))=obp-i2;
@@ -829,6 +744,5 @@
 
 					//jmp 5（ループ終了）
-					OpBuffer[obp++]=(char)0xEB;
-					OpBuffer[obp++]=(char)0x05;
+					pDoPertialSchedule = compiler.codeGenerator.op_jmp( 0, sizeof(char), true );
 				}
 			}
@@ -844,6 +758,5 @@
 
 					//je 5（ループ終了）
-					OpBuffer[obp++]=(char)0x74;
-					OpBuffer[obp++]=(char)0x05;
+					pDoPertialSchedule = compiler.codeGenerator.op_je( 0, sizeof(char), true );
 				}
 				else if(basbuf[i3]=='1'){
@@ -851,6 +764,5 @@
 
 					//jne 5（ループ終了）
-					OpBuffer[obp++]=(char)0x75;
-					OpBuffer[obp++]=(char)0x05;
+					pDoPertialSchedule = compiler.codeGenerator.op_jne( 0, sizeof(char), true );
 				}
 			}
@@ -860,7 +772,10 @@
 
 	//jmp ...
-	OpBuffer[obp++]=(char)0xE9;
-	*((long *)(OpBuffer+obp))=dwContinueAddress-(obp+sizeof(long));
-	obp+=sizeof(long);
+	compiler.codeGenerator.op_jmp_continue();
+
+	if( pDoPertialSchedule )
+	{
+		compiler.codeGenerator.opfix_JmpPertialSchedule( pDoPertialSchedule );
+	}
 
 	//jmp ...
@@ -876,19 +791,9 @@
 
 	//Continueアドレスを復元
-	dwContinueAddress=dwTempContinue;
+	compiler.codeGenerator.ContinueAreaEnd();
 }
 void OpcodeContinue(void){
-	extern DWORD dwContinueAddress;
-
-	if(dwContinueAddress==-1){
-		SetError(12,"Continue",cp);
-		return;
-	}
-
 	//jmp ...(Continue addr)
-	OpBuffer[obp++]=(char)0xE9;
-
-	*((long *)(OpBuffer+obp))=dwContinueAddress-(obp+sizeof(long));
-	obp+=sizeof(long);
+	compiler.codeGenerator.op_jmp_continue();
 }
 
Index: /trunk/abdev/BasicCompiler32/Compile_Var.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/Compile_Var.cpp	(revision 240)
+++ /trunk/abdev/BasicCompiler32/Compile_Var.cpp	(revision 241)
@@ -140,7 +140,9 @@
 
 		//add dword ptr[esp],eax
-		OpBuffer[obp++]=(char)0x01;
-		OpBuffer[obp++]=(char)0x04;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.PutOld(
+			(char)0x01,
+			(char)0x04,
+			(char)0x24
+		);
 
 		HeapDefaultFree(pParm[i]);
@@ -238,8 +240,5 @@
 	if(offset){
 		//add ecx,offset
-		OpBuffer[obp++]=(char)0x81;
-		OpBuffer[obp++]=(char)0xC1;
-		*((long *)(OpBuffer+obp))=offset;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_add_RV( REG_ECX, offset );
 	}
 
@@ -314,6 +313,5 @@
 
 				//mov ecx,dword ptr[ecx]
-				OpBuffer[obp++]=(char)0x8B;
-				OpBuffer[obp++]=(char)0x09;
+				compiler.codeGenerator.op_mov_RM( sizeof(long), REG_ECX, REG_ECX, 0, MOD_BASE );
 			}
 			else{
@@ -669,6 +667,5 @@
 
 				//mov ecx,dword ptr[eax]
-				OpBuffer[obp++]=(char)0x8B;
-				OpBuffer[obp++]=(char)0x08;
+				compiler.codeGenerator.op_mov_RM( sizeof(long), REG_ECX, REG_EAX, 0, MOD_BASE );
 			}
 		}
@@ -690,6 +687,5 @@
 
 				//mov ecx,dword ptr[eax]
-				OpBuffer[obp++]=(char)0x8B;
-				OpBuffer[obp++]=(char)0x08;
+				compiler.codeGenerator.op_mov_RM( sizeof(long), REG_ECX, REG_EAX, 0, MOD_BASE );
 			}
 			else{
@@ -964,7 +960,5 @@
 	if( type.IsDouble() ){
 		//mov eax,HILONG(dbl)
-		OpBuffer[obp++]=(char)0xB8;
-		*((long *)(OpBuffer+obp))=(long)*(long *)(((char *)(&dbl))+4);
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_EAX, *(long *)(((char *)(&dbl))+4) );
 
 		//mov dword ptr[ebp+offset+sizeof(long)],eax
@@ -1133,6 +1127,5 @@
 
 			//mov eax,ebp
-			OpBuffer[obp++]=(char)0x8B;
-			OpBuffer[obp++]=(char)0xC5;
+			compiler.codeGenerator.op_mov_RR( REG_EAX, REG_EBP );
 
 			//add eax,offset
@@ -1192,6 +1185,5 @@
 		if(pRelativeVar->bOffsetOffset){
 			//mov eax,ecx
-			OpBuffer[obp++]=(char)0x8B;
-			OpBuffer[obp++]=(char)0xC1;
+			compiler.codeGenerator.op_mov_RR( REG_EAX, REG_ECX );
 
 			//add eax,dword ptr[offset]
@@ -1209,8 +1201,10 @@
 
 			//lea eax,dword ptr[ebp+ecx]
-			OpBuffer[obp++]=(char)0x8D;
-			OpBuffer[obp++]=(char)0x44;
-			OpBuffer[obp++]=(char)0x0D;
-			OpBuffer[obp++]=(char)0x00;
+			compiler.codeGenerator.PutOld(
+				(char)0x8D,
+				(char)0x44,
+				(char)0x0D,
+				(char)0x00
+			);
 		}
 		else{
Index: /trunk/abdev/BasicCompiler32/MakePeHdr.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/MakePeHdr.cpp	(revision 240)
+++ /trunk/abdev/BasicCompiler32/MakePeHdr.cpp	(revision 241)
@@ -434,6 +434,5 @@
 
 		//Continueアドレスを初期化
-		extern DWORD dwContinueAddress;
-		dwContinueAddress=-1;
+		compiler.codeGenerator.ClearContinueArea();
 
 		// コード生成対象を選択
Index: /trunk/abdev/BasicCompiler_Common/Compile.cpp
===================================================================
--- /trunk/abdev/BasicCompiler_Common/Compile.cpp	(revision 240)
+++ /trunk/abdev/BasicCompiler_Common/Compile.cpp	(revision 241)
@@ -23,7 +23,4 @@
 LABEL *pLabelNames;
 int MaxLabelNum;
-
-//Continueアドレス
-DWORD dwContinueAddress;
 
 //Caseスケジュール
Index: /trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h
===================================================================
--- /trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h	(revision 240)
+++ /trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h	(revision 241)
@@ -52,7 +52,13 @@
 
 private:
+
+	// 部分スケジュールの管理
 	typedef std::vector<PertialSchedule *> PertialSchedules;
 	PertialSchedules pertialSchedules;
 
+	// Continue用のコード位置情報の管理
+	std::vector<long> continueCodePositions;
+	std::vector<long> _continueCodePositions_ObpOld;
+
 public:
 
@@ -78,4 +84,38 @@
 	}
 
+	long GetContinueCodePos() const
+	{
+		if( continueCodePositions.size() == 0 )
+		{
+			return -1;
+		}
+		return continueCodePositions[continueCodePositions.size()-1];
+	}
+	void ClearContinueArea()
+	{
+		continueCodePositions.clear();
+		_continueCodePositions_ObpOld.clear();
+	}
+	void ContinueAreaBegin()
+	{
+		continueCodePositions.push_back( pNativeCode->GetSize() );
+
+		extern int obp;
+		_continueCodePositions_ObpOld.push_back( obp );
+	}
+	void ContinueAreaEnd()
+	{
+		continueCodePositions.pop_back();
+		_continueCodePositions_ObpOld.pop_back();
+	}
+	long GetContinueCodePosOld() const
+	{
+		if( _continueCodePositions_ObpOld.size() == 0 )
+		{
+			return -1;
+		}
+		return _continueCodePositions_ObpOld[_continueCodePositions_ObpOld.size()-1];
+	}
+
 	void CheckUnresolveSchedule();
 
@@ -88,5 +128,5 @@
 
 private:
-	PertialSchedule *__jmp_op_format( char opcode, long offset, int op_size, bool isPertialSchedule = false );
+	PertialSchedule *__jmp_op_format( char opcode, long offset, int op_size, bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
 public:
 	PertialSchedule *op_jle( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
@@ -100,5 +140,6 @@
 	PertialSchedule *op_jne( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
 	PertialSchedule *op_je( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
-	PertialSchedule *op_jmp( long offset, int op_size = sizeof(char), bool isPertialSchedule = false );
+	PertialSchedule *op_jmp( long offset, int op_size = sizeof(char), bool isPertialSchedule = false, bool isSelfOpcodeOffset = false );
+	void op_jmp_continue();
 
 
Index: /trunk/abdev/BasicCompiler_Common/include/NativeCode.h
===================================================================
--- /trunk/abdev/BasicCompiler_Common/include/NativeCode.h	(revision 240)
+++ /trunk/abdev/BasicCompiler_Common/include/NativeCode.h	(revision 241)
@@ -141,6 +141,15 @@
 		// 未完成
 		extern char *OpBuffer;
-		extern int obp;
 		OpBuffer[_obpOld] = c;
+	}
+	void Overwrite( int codePos, long newLongValue )
+	{
+		*(long *)(this->codeBuffer+codePos) = newLongValue;
+	}
+	void OverwriteOld( int _obpOld, long newLongValue )
+	{
+		// 未完成
+		extern char *OpBuffer;
+		*(long *)(OpBuffer+_obpOld) = newLongValue;
 	}
 
Index: /trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp
===================================================================
--- /trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp	(revision 240)
+++ /trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp	(revision 241)
@@ -23,11 +23,28 @@
 		if( (*it) == pPertialSchedule )
 		{
+			long newValue = pNativeCode->GetSize() - (pPertialSchedule->GetCodePos()+pPertialSchedule->GetTypeSize());
+
+			extern int obp;
+			long newValueOld = obp - (pPertialSchedule->GetObpOld()+pPertialSchedule->GetTypeSize());
+
 			if( pPertialSchedule->GetTypeSize() == sizeof(char) )
 			{
-				pNativeCode->Overwrite( pPertialSchedule->GetCodePos(), (char)( pNativeCode->GetSize() - (pPertialSchedule->GetCodePos()+1) ) );
+				if( newValue < -128 || 127 < newValue )
+				{
+					// 範囲外
+					SetError();
+				}
+
+				pNativeCode->Overwrite( pPertialSchedule->GetCodePos(), (char)newValue );
 
 				// TODO: 未完成（用が無くなったら消す）
-				extern int obp;
-				pNativeCode->OverwriteOld( pPertialSchedule->GetObpOld(), (char)( obp - (pPertialSchedule->GetObpOld()+1) ) );
+				pNativeCode->OverwriteOld( pPertialSchedule->GetObpOld(), (char)newValueOld );
+			}
+			else if( pPertialSchedule->GetTypeSize() == sizeof(long) )
+			{
+				pNativeCode->Overwrite( pPertialSchedule->GetCodePos(), newValue );
+
+				// TODO: 未完成（用が無くなったら消す）
+				pNativeCode->OverwriteOld( pPertialSchedule->GetObpOld(), newValueOld );
 			}
 			else
@@ -52,7 +69,45 @@
 	}
 }
-CodeGenerator::PertialSchedule *CodeGenerator::__jmp_op_format( char opcode, long offset, int op_size, bool isPertialSchedule )
-{
-	pNativeCode->Put( opcode );
+CodeGenerator::PertialSchedule *CodeGenerator::__jmp_op_format( char opcode, long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
+{
+	long beginCodePos = pNativeCode->GetSize();
+	{
+		// TODO: 未完成
+		extern int obp;
+		beginCodePos = obp;
+	}
+
+	if( opcode == (char)0xEB )
+	{
+		// jmp命令のとき
+		if( op_size == sizeof(char) )
+		{
+			pNativeCode->Put( (char)opcode );
+		}
+		else if( op_size == sizeof(long) )
+		{
+			pNativeCode->Put( (char)0xE9 );
+		}
+		else
+		{
+			SetError();
+		}
+	}
+	else
+	{
+		if( op_size == sizeof(char) )
+		{
+			pNativeCode->Put( (char)((char)0x70 | opcode) );
+		}
+		else if( op_size == sizeof(long) )
+		{
+			pNativeCode->Put( (char)0x0F );
+			pNativeCode->Put( (char)((char)0x80 | opcode) );
+		}
+		else
+		{
+			SetError();
+		}
+	}
 
 	PertialSchedule *pPertialSchedule = NULL;
@@ -63,4 +118,14 @@
 	}
 
+	if( isSelfOpcodeOffset )
+	{
+		// 自分自身の命令サイズを考慮する場合
+		//offset += ( pNativeCode->GetSize() - beginCodePos ) + op_size;
+
+		// TODO: 未完成
+		extern int obp;
+		offset -= ( obp - beginCodePos ) + op_size;
+	}
+
 	if( op_size == sizeof(char) )
 	{
@@ -69,10 +134,9 @@
 	else if( op_size == sizeof(long) )
 	{
+		pNativeCode->Put( offset );
+	}
+	else
+	{
 		SetError();
-		pNativeCode->Put( offset );
-	}
-	else
-	{
-		SetError();
 	}
 
@@ -81,44 +145,59 @@
 CodeGenerator::PertialSchedule *CodeGenerator::op_jle( long offset, int op_size, bool isPertialSchedule )
 {
-	return __jmp_op_format( (char)0x7E, offset, op_size, isPertialSchedule );
+	return __jmp_op_format( (char)0x0E, offset, op_size, isPertialSchedule );
 }
 CodeGenerator::PertialSchedule *CodeGenerator::op_jbe( long offset, int op_size, bool isPertialSchedule )
 {
-	return __jmp_op_format( (char)0x76, offset, op_size, isPertialSchedule );
+	return __jmp_op_format( (char)0x06, offset, op_size, isPertialSchedule );
 }
 CodeGenerator::PertialSchedule *CodeGenerator::op_jge( long offset, int op_size, bool isPertialSchedule )
 {
-	return __jmp_op_format( (char)0x7D, offset, op_size, isPertialSchedule );
+	return __jmp_op_format( (char)0x0D, offset, op_size, isPertialSchedule );
 }
 CodeGenerator::PertialSchedule *CodeGenerator::op_jae( long offset, int op_size, bool isPertialSchedule )
 {
-	return __jmp_op_format( (char)0x73, offset, op_size, isPertialSchedule );
+	return __jmp_op_format( (char)0x03, offset, op_size, isPertialSchedule );
 }
 CodeGenerator::PertialSchedule *CodeGenerator::op_jl( long offset, int op_size, bool isPertialSchedule )
 {
-	return __jmp_op_format( (char)0x7C, offset, op_size, isPertialSchedule );
+	return __jmp_op_format( (char)0x0C, offset, op_size, isPertialSchedule );
 }
 CodeGenerator::PertialSchedule *CodeGenerator::op_jb( long offset, int op_size, bool isPertialSchedule )
 {
-	return __jmp_op_format( (char)0x72, offset, op_size, isPertialSchedule );
+	return __jmp_op_format( (char)0x02, offset, op_size, isPertialSchedule );
 }
 CodeGenerator::PertialSchedule *CodeGenerator::op_jg( long offset, int op_size, bool isPertialSchedule )
 {
-	return __jmp_op_format( (char)0x7F, offset, op_size, isPertialSchedule );
+	return __jmp_op_format( (char)0x0F, offset, op_size, isPertialSchedule );
 }
 CodeGenerator::PertialSchedule *CodeGenerator::op_ja( long offset, int op_size, bool isPertialSchedule )
 {
-	return __jmp_op_format( (char)0x77, offset, op_size, isPertialSchedule );
+	return __jmp_op_format( (char)0x07, offset, op_size, isPertialSchedule );
 }
 CodeGenerator::PertialSchedule *CodeGenerator::op_jne( long offset, int op_size, bool isPertialSchedule )
 {
-	return __jmp_op_format( (char)0x75, offset, op_size, isPertialSchedule );
+	return __jmp_op_format( (char)0x05, offset, op_size, isPertialSchedule );
 }
 CodeGenerator::PertialSchedule *CodeGenerator::op_je( long offset, int op_size, bool isPertialSchedule )
 {
-	return __jmp_op_format( (char)0x74, offset, op_size, isPertialSchedule );
-}
-CodeGenerator::PertialSchedule *CodeGenerator::op_jmp( long offset, int op_size, bool isPertialSchedule )
-{
-	return __jmp_op_format( (char)0xEB, offset, op_size, isPertialSchedule );
-}
+	return __jmp_op_format( (char)0x04, offset, op_size, isPertialSchedule );
+}
+CodeGenerator::PertialSchedule *CodeGenerator::op_jmp( long offset, int op_size, bool isPertialSchedule, bool isSelfOpcodeOffset )
+{
+	return __jmp_op_format( (char)0xEB, offset, op_size, isPertialSchedule, isSelfOpcodeOffset );
+}
+void CodeGenerator::op_jmp_continue()
+{
+	//op_jmp( GetContinueCodePos()-(pNativeCode->GetSize()+sizeof(long)), sizeof(long) );
+
+	// TODO: 未完成（OpBuffer/obp廃止が整ったら上記のコードを有効にすべし）
+
+	if( GetContinueCodePosOld() == -1 )
+	{
+		SetError(12,"Continue",cp);
+		return;
+	}
+
+	extern int obp;
+	op_jmp( GetContinueCodePosOld()-obp, sizeof(long), false, true );
+}
