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

📄 memory.cpp

📁 此程序类似于我们一般使用的CPU
💻 CPP
字号:
#include "memory.h"

Memory::Memory()
{
	pCodeNail=0;
	pDataNail=0;
	pVarNail=0;
}
int Memory::InsertData(int values)
{
	BYTE tempValue;
	tempValue=(BYTE)((values&0xff00)>>8);
	DataSegment[pDataNail]=tempValue;
	pDataNail++;
	tempValue=(BYTE)(values&0x00ff);
	DataSegment[pDataNail]=tempValue;
	pDataNail++;
	return pDataNail-2;
}
int Memory::InsertIntoMemory(char va,int values)
{
	var[pVarNail]=va;	
	int i=InsertData(values);
	addrOfVar[pVarNail]=i;
	styOfVar[pVarNail]=INTS;
	pVarNail++;
	return i;
}
int Memory::InsertIntoMemory(char va,char values)
{
	var[pVarNail]=va;
	addrOfVar[pVarNail]=pDataNail;
	styOfVar[pVarNail]=CHARS;
	DataSegment[pDataNail]=(BYTE)values;
	pDataNail++;
	pVarNail++;
	return pDataNail-1;
}
void Memory::InsertCode(BYTE code)
{
	CodeSegment[pCodeNail]=code;
	pCodeNail++;
}
int Memory::FindVarAddr(char va)
{
	int temp=0;
	while (temp<pVarNail)
	{
		if (var[temp]==va)
		{
			return addrOfVar[temp];
		}
		temp++;
	}
	return -1;
}
style Memory::GetVarStyle(char va)
{
	int i=0;
	while (i<pVarNail)
	{
		if (var[i]==va)
		{
			return styOfVar[i];
		}
		i++;
	}
	return EMPTY;
}
void Memory::ChangeValues(int addr,int values)
{
	BYTE tempByte;
	int tempAddr=addr;
	tempByte=(BYTE)((values&0xff00)>>8);
	DataSegment[tempAddr]=tempByte;
	tempAddr++;
	tempByte=(BYTE)(values&0x00ff);
	DataSegment[tempAddr]=tempByte;
}
void Memory::MemoryClear()
{
	pVarNail=0;
	pDataNail=0;
	pCodeNail=0;
}
void Memory::MemoryCodeClear()
{
	pCodeNail=0;
}
int Memory::GetCodeLength()
{
	return pCodeNail;
}
void Memory::ChangeValues(int addr,BYTE values)
{
	DataSegment[addr]=values;
}
BYTE Memory::ReadData(int addr)
{
	return DataSegment[addr];
}
void Memory::OutPutCodeMemory(char * name)
{
	FILE * fp=fopen(name,"wb+");
	if (pCodeNail>0)
	{
	//	fwrite(CodeSegment,sizeof(BYTE),pCodeNail,fp);
		char * a=new char[9*pCodeNail];
		for (int i=0;i<9*pCodeNail;i++)
		{
			int IP=i/9;
			int offset=i%9;
			if (offset==8)
			{
				a[i]=' ';
			}
			else
			{
				int tempInt=(int)(CodeSegment[IP]>>(7-offset));
				if (tempInt==1)
					a[i]='1';
				else
					a[i]='0';
			}
			
		}
		fwrite(a,sizeof(char),9*pCodeNail,fp);
		delete a;
	}
	fclose(fp);
}
void Memory::OutPutDataMemory(char * name)
{
	FILE * fp=fopen(name,"wb+");
	if (pDataNail>0)
	{
		//	fwrite(CodeSegment,sizeof(BYTE),pCodeNail,fp);
		char * a=new char[9*pDataNail];
		for (int i=0;i<9*pDataNail;i++)
		{
			int IP=i/9;
			int offset=i%9;
			if (offset==8)
			{
				a[i]=' ';
			}
			else
			{
				int tempInt=(int)(DataSegment[IP]>>(7-offset));
				if (tempInt==1)
					a[i]='1';
				else
					a[i]='0';
			}
			
		}
		fwrite(a,sizeof(char),9*pDataNail,fp);
		delete a;
	}
	fclose(fp);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -