📄 test.cpp
字号:
#include "VMachine.h"
#include <fstream>
#include <iostream>
#include <assert.h>
#include <string>
using namespace std;
static BYTE code[16000];
const char* srcName = "e:\\asm.txt";
TVMachine vm;
bool ReadFile(const char* name,BYTE* pCode);
bool Debug();
int main()
{
if(!ReadFile(srcName,code))
{
assert(false);
}
vm.Run(code);
Debug();
return 0;
}
bool ReadFile(const char* name,BYTE* pCode)
{
ifstream infile(name);
if(infile.fail())
{
assert(false);
return false;
}
while(!infile.eof())
{
char ins;
infile>>ins;
switch(ins)
{
case 'm':
{
*pCode = (BYTE)E_MOV;
pCode++;
infile>>*((DWORD*)pCode);
pCode += sizeof(DWORD);
infile>>*((DWORD*)pCode);
pCode += sizeof(DWORD);
}
break;
case 's':
{
*pCode = (BYTE)E_SET;
pCode++;
infile>>*((DWORD*)pCode);
pCode += sizeof(DWORD);
infile>>*((DWORD*)pCode);
pCode += sizeof(DWORD);
}
break;
case '+':
{
*pCode = (BYTE)E_ADD;
pCode++;
infile>>*((DWORD*)pCode);
pCode += sizeof(DWORD);
infile>>*((DWORD*)pCode);
pCode += sizeof(DWORD);
infile>>*((DWORD*)pCode);
pCode += sizeof(DWORD);
}
break;
case '-':
{
*pCode = (BYTE)E_SUB;
pCode++;
infile>>*((DWORD*)pCode);
pCode += sizeof(DWORD);
infile>>*((DWORD*)pCode);
pCode += sizeof(DWORD);
infile>>*((DWORD*)pCode);
pCode += sizeof(DWORD);
}
break;
case '%':
{
*pCode = (BYTE)E_END;
pCode++;
}
break;
case 'j': //jmp
{
*pCode = (BYTE)E_JMP;
pCode++;
infile>>*((DWORD*)pCode);
pCode += sizeof(DWORD);
}
break;
case 'z': //jz
{
*pCode = (BYTE)E_JZ;
pCode++;
infile>>*((DWORD*)pCode);
pCode += sizeof(DWORD);
infile>>*((DWORD*)pCode);
pCode += sizeof(DWORD);
}
break;
case 't'://te
{
*pCode = (BYTE)E_TEQ;
pCode++;
infile>>*((DWORD*)pCode);
pCode += sizeof(DWORD);
infile>>*((DWORD*)pCode);
pCode += sizeof(DWORD);
infile>>*((DWORD*)pCode);
pCode += sizeof(DWORD);
}
break;
default:
{
assert(false);
}
}
}
return true;
}
bool Debug()
{
cout<<"========DEBUG========="<<endl;
cout<<"p to see pc"<<endl;
cout<<"s to see sp"<<endl;
cout<<"axxx to see value of add"<<endl;
cout<<"q to quit"<<endl;
cout<<"r to restart"<<endl;
cout<<"======================"<<endl;
char ins;
cin>>ins;
while(ins != 'q')
{
switch(ins)
{
case 'p':
{
cout<<"PC is "<<vm.GetPC()<<endl;
}
break;
case 's':
{
cout<<"PC is "<<vm.GetPC()<<endl;
}
break;
case 'a':
{
cout<<":";
int num;
cin>>num;
if(num>=0)
{
cout<<endl<<"The address "<<num<<" is "<<vm.GetStackVar(num)<<endl;
}
else
{
cout<<"Invalid address"<<endl;
}
}
break;
case 'r':
{
if(!ReadFile(srcName,code))
{
assert(false);
}
vm.Run(code);
}
break;
default:
{
assert(false);
}
}
cout<<endl;
cin>>ins;
}
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -