📄 code.cpp
字号:
//---------------------------------------------------------------------------
#pragma hdrstop
#include "Code.h"
#include "EnmuUnit.h"
unsigned long int Ip;
unsigned long int Cmp;
int quit;
void RunEnmu()
{
unsigned long int Code0,Op0,Op1;
Ip=0;
unsigned long int x,y,c;
AnsiString IpStr;
AnsiString Codes;
while(1)
{
Application->ProcessMessages();
Sleep(Form1->TrackBar1->Position);
IpStr.sprintf("IP=%d",Ip);
Form1->Label1->Caption=IpStr;
Application->ProcessMessages();
Code0=ASM[Ip];
Op0 =ASM[Ip+1];
Op1 =ASM[Ip+2];
switch(Code0)
{
case T_NOP:
Codes.printf("T_NOP");
Form1->Label4->Caption=Codes;
Application->ProcessMessages();
break;
case T_MOV:
ASM[Op0]=ASM[Op1];
Codes.printf("T_MOV %d,%d",Op0,Op1);
Form1->Label4->Caption=Codes;
Application->ProcessMessages();
break;
case T_ADD:
ASM[Op0]+=ASM[Op1];
Codes.printf("T_ADD %d,%d",Op0,Op1);
Form1->Label4->Caption=Codes;
Application->ProcessMessages();
break;
case T_CMP:
if(ASM[Op0]<ASM[Op1])
Cmp=0;
else
Cmp=1;
Codes.printf("T_CMP %d,%d",Op0,Op1);
Form1->Label4->Caption=Codes;
Application->ProcessMessages();
break;
case T_JMP:
Ip=Op0;
Codes.printf("T_JMP %d",Op0);
Form1->Label4->Caption=Codes;
Application->ProcessMessages();
continue;
case T_JCP:
if(Cmp==0)
Ip=Op0;
else
Ip=Op1;
Codes.printf("T_JCP %d,%d",Op0,Op1);
Form1->Label4->Caption=Codes;
Application->ProcessMessages();
continue;
case T_PUT:
x=ASM[Op0]/20;
y=ASM[Op0]%20;
c=ASM[Op1];
Form1->Image1->Canvas->Brush->Color = (TColor)(c);
Form1->Image1->Canvas->FillRect(Rect(x*10,y*10,x*10+10,y*10+10));
Codes.printf("T_PUT %d,%d",Op0,Op1);
Form1->Label4->Caption=Codes;
Application->ProcessMessages();
break;
}
Ip+=3;
if(quit==1)return;
}
}
unsigned long int ASM[]=
{
T_JMP, 12, 0, //00
0, //03,i
1, //04,2
0, //05,c
10, //06, 1
400, //07,100
16777216, //08,16777216
0, //09
0, //10
0, //11
T_NOP, T_NOP, T_NOP, //12
T_PUT, 2, 2, //15
//I+=2.C++
T_ADD, 3, 4, //18
T_ADD, 5, 6, //21
T_CMP, 3, 7, //24
T_JCP, 30, 33, //27
T_JMP, 36, 0, //30
T_MOV, 3, 2, //33
T_CMP, 5, 8, //36
T_JCP, 42, 45, //39
T_JMP, 48, 0, //42
T_MOV, 5, 2, //45
T_PUT, 3, 5, //48
T_JMP, 18, 0, //51
};
//---------------------------------------------------------------------------
#pragma package(smart_init)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -