📄 ucvm9.cpp
字号:
#ifndef UCVM9_CPP
#define UCVM9_CPP
//---------------------------------------------------------------------------
TUCVM9::TUCVM9()
{
m_var_count = 0;
m_fun_count = 0;
m_ins_count = 0;
}
TUCVM9::~TUCVM9()
{
cln_var();
cln_fun();
}
//---------------------------------------------------------------------------
int TUCVM9::load_asm_file(char *file_name)
{
FILE *fp;
if((fp = fopen(file_name, "r+")) != NULL)
{
char buf_a[1024];
char str_a[1024];
char str_b[1024];
int i;
for(i = 0; i < 512; i ++)
{
if(fgets(buf_a, 1022, fp) == NULL)
break;
str_a[0] = 0;
str_b[0] = 0;
sscanf(buf_a, "%s %s", str_a, str_b);
if(strcmp("push_c", str_a) == 0)
{
m_ins_array[i].ins_code = 0x01;
m_ins_array[i].ins_data = new char[1];
*(char *)(m_ins_array[i].ins_data) = str_b[0];
}
else
if(strcmp("push_i", str_a) == 0)
{
m_ins_array[i].ins_code = 0x02;
m_ins_array[i].ins_data = new long[1];
*(long *)(m_ins_array[i].ins_data) = atoi(str_b);
}
else
if(strcmp("push_r", str_a) == 0)
{
m_ins_array[i].ins_code = 0x03;
m_ins_array[i].ins_data = new REAL[1];
*(REAL *)(m_ins_array[i].ins_data) = atof(str_b);
}
else
if(strcmp("push_s", str_a) == 0)
{
m_ins_array[i].ins_code = 0x04;
m_ins_array[i].ins_data = cclone_str(str_b);
}
else
if(strcmp("push_v", str_a) == 0)
{
m_ins_array[i].ins_code = 0x05;
m_ins_array[i].ins_data = search_var(str_b);
if(m_ins_array[i].ins_data == NULL)
return(-2);
}
else
if(strcmp("pop_lo", str_a) == 0)
{
m_ins_array[i].ins_code = 0x06;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("add_nb", str_a) == 0)
{
m_ins_array[i].ins_code = 0x07;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("sub_nb", str_a) == 0)
{
m_ins_array[i].ins_code = 0x08;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("mul_nb", str_a) == 0)
{
m_ins_array[i].ins_code = 0x09;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("div_nb", str_a) == 0)
{
m_ins_array[i].ins_code = 0x0a;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("rem_nb", str_a) == 0)
{
m_ins_array[i].ins_code = 0x0b;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("umi_nb", str_a) == 0)
{
m_ins_array[i].ins_code = 0x0c;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("and_bt", str_a) == 0)
{
m_ins_array[i].ins_code = 0x0d;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("xor_bt", str_a) == 0)
{
m_ins_array[i].ins_code = 0x0e;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("oor_bt", str_a) == 0)
{
m_ins_array[i].ins_code = 0x0f;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("shl_bt", str_a) == 0)
{
m_ins_array[i].ins_code = 0x10;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("shr_bt", str_a) == 0)
{
m_ins_array[i].ins_code = 0x11;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("not_bt", str_a) == 0)
{
m_ins_array[i].ins_code = 0x12;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("and_lg", str_a) == 0)
{
m_ins_array[i].ins_code = 0x13;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("oor_lg", str_a) == 0)
{
m_ins_array[i].ins_code = 0x14;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("not_lg", str_a) == 0)
{
m_ins_array[i].ins_code = 0x15;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("assign", str_a) == 0)
{
m_ins_array[i].ins_code = 0x16;
m_ins_array[i].ins_data = search_var(str_b);
if(m_ins_array[i].ins_data == NULL)
return(-2);
}
else
if(strcmp("add_as", str_a) == 0)
{
m_ins_array[i].ins_code = 0x17;
m_ins_array[i].ins_data = search_var(str_b);
if(m_ins_array[i].ins_data == NULL)
return(-2);
}
else
if(strcmp("sub_as", str_a) == 0)
{
m_ins_array[i].ins_code = 0x18;
m_ins_array[i].ins_data = search_var(str_b);
if(m_ins_array[i].ins_data == NULL)
return(-2);
}
else
if(strcmp("mul_as", str_a) == 0)
{
m_ins_array[i].ins_code = 0x19;
m_ins_array[i].ins_data = search_var(str_b);
if(m_ins_array[i].ins_data == NULL)
return(-2);
}
else
if(strcmp("div_as", str_a) == 0)
{
m_ins_array[i].ins_code = 0x1a;
m_ins_array[i].ins_data = search_var(str_b);
if(m_ins_array[i].ins_data == NULL)
return(-2);
}
else
if(strcmp("rem_as", str_a) == 0)
{
m_ins_array[i].ins_code = 0x1b;
m_ins_array[i].ins_data = search_var(str_b);
if(m_ins_array[i].ins_data == NULL)
return(-2);
}
else
if(strcmp("and_as", str_a) == 0)
{
m_ins_array[i].ins_code = 0x1c;
m_ins_array[i].ins_data = search_var(str_b);
if(m_ins_array[i].ins_data == NULL)
return(-2);
}
else
if(strcmp("xor_as", str_a) == 0)
{
m_ins_array[i].ins_code = 0x1d;
m_ins_array[i].ins_data = search_var(str_b);
if(m_ins_array[i].ins_data == NULL)
return(-2);
}
else
if(strcmp("oor_as", str_a) == 0)
{
m_ins_array[i].ins_code = 0x1e;
m_ins_array[i].ins_data = search_var(str_b);
if(m_ins_array[i].ins_data == NULL)
return(-2);
}
else
if(strcmp("shl_as", str_a) == 0)
{
m_ins_array[i].ins_code = 0x1f;
m_ins_array[i].ins_data = search_var(str_b);
if(m_ins_array[i].ins_data == NULL)
return(-2);
}
else
if(strcmp("shr_as", str_a) == 0)
{
m_ins_array[i].ins_code = 0x20;
m_ins_array[i].ins_data = search_var(str_b);
if(m_ins_array[i].ins_data == NULL)
return(-2);
}
else
if(strcmp("cmp_ne", str_a) == 0)
{
m_ins_array[i].ins_code = 0x21;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("cmp_eq", str_a) == 0)
{
m_ins_array[i].ins_code = 0x22;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("cmp_le", str_a) == 0)
{
m_ins_array[i].ins_code = 0x23;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("cmp_ge", str_a) == 0)
{
m_ins_array[i].ins_code = 0x24;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("cmp_ll", str_a) == 0)
{
m_ins_array[i].ins_code = 0x25;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("cmp_gg", str_a) == 0)
{
m_ins_array[i].ins_code = 0x26;
m_ins_array[i].ins_data = 0;
}
else
if(strcmp("jmp_ez", str_a) == 0)
{
m_ins_array[i].ins_code = 0x27;
m_ins_array[i].ins_data = cclone_str(str_b);
}
else
if(strcmp("jmp_nz", str_a) == 0)
{
m_ins_array[i].ins_code = 0x28;
m_ins_array[i].ins_data = cclone_str(str_b);
}
else
if(strcmp("jmp_to", str_a) == 0)
{
m_ins_array[i].ins_code = 0x29;
m_ins_array[i].ins_data = cclone_str(str_b);
}
else
if(strcmp("jmp_ne", str_a) == 0)
{
m_ins_array[i].ins_code = 0x2a;
m_ins_array[i].ins_data = cclone_str(str_b);
}
else
if(strcmp("jmp_eq", str_a) == 0)
{
m_ins_array[i].ins_code = 0x2b;
m_ins_array[i].ins_data = cclone_str(str_b);
}
else
if(strcmp("jmp_le", str_a) == 0)
{
m_ins_array[i].ins_code = 0x2c;
m_ins_array[i].ins_data = cclone_str(str_b);
}
else
if(strcmp("jmp_ge", str_a) == 0)
{
m_ins_array[i].ins_code = 0x2d;
m_ins_array[i].ins_data = cclone_str(str_b);
}
else
if(strcmp("jmp_ll", str_a) == 0)
{
m_ins_array[i].ins_code = 0x2e;
m_ins_array[i].ins_data = cclone_str(str_b);
}
else
if(strcmp("jmp_gg", str_a) == 0)
{
m_ins_array[i].ins_code = 0x2f;
m_ins_array[i].ins_data = cclone_str(str_b);
}
else
if(strcmp("inc_af", str_a) == 0)
{
m_ins_array[i].ins_code = 0x30;
m_ins_array[i].ins_data = search_var(str_b);
if(m_ins_array[i].ins_data == NULL)
return(-2);
}
else
if(strcmp("inc_bf", str_a) == 0)
{
m_ins_array[i].ins_code = 0x31;
m_ins_array[i].ins_data = search_var(str_b);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -