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

📄 code.cpp

📁 用CC++编写的源代码公开的简单的32位精简指令虚拟机
💻 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 + -