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

📄 uasm.cpp

📁 模拟了tec2000的所有功能
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	int SR;
	byte_t sd;
	in_file.read((char*)&sd,sizeof(byte_t));
	DR=(sd&0xf0)>>4;
	SR=sd&0x0f;
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tSUB   R"<<dec<<DR<<", R"<<SR<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 01";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
    j=(j+1)%8;
	addr++;
	
}


void CUasm::and(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	int DR;
	int SR;
	byte_t sd;
	in_file.read((char*)&sd,sizeof(byte_t));
	DR=(sd&0xf0)>>4;
	SR=sd&0x0f;
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tAND   R"<<dec<<DR<<", R"<<SR<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 02";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
	
}

void CUasm::cmp(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	int DR;
	int SR;
	byte_t sd;
	in_file.read((char*)&sd,sizeof(byte_t));
	DR=(sd&0xf0)>>4;
	SR=sd&0x0f;
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tCMP   R"<<dec<<DR<<", R"<<SR<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 03";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}

void CUasm::xor(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	int DR;
	int SR;
	byte_t sd;
	in_file.read((char*)&sd,sizeof(byte_t));
	DR=(sd&0xf0)>>4;
	SR=sd&0x0f;
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tXOR   R"<<dec<<DR<<", R"<<SR<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 04";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}

void CUasm::test(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	int DR;
	int SR;
	byte_t sd;
	in_file.read((char*)&sd,sizeof(byte_t));
	DR=(sd&0xf0)>>4;
	SR=sd&0x0f;
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tTEST   R"<<dec<<DR<<", R"<<SR<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 05";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}


void CUasm::or(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	int DR;
	int SR;
	byte_t sd;
	in_file.read((char*)&sd,sizeof(byte_t));
	DR=(sd&0xf0)>>4;
	SR=sd&0x0f;
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tOR    R"<<dec<<DR<<", R"<<SR<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 06";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}

void CUasm::mvrr(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	int DR;
	int SR;
	byte_t sd;
	in_file.read((char*)&sd,sizeof(byte_t));
	DR=(sd&0xf0)>>4;
	SR=sd&0x0f;
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tMVRR  R"<<dec<<DR<<", R"<<SR<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 07";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}

void CUasm::ldrr(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	int DR;
	int SR;
	byte_t sd;
	in_file.read((char*)&sd,sizeof(byte_t));
	DR=(sd&0xf0)>>4;
	SR=sd&0x0f;
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tLDRR  R"<<dec<<DR<<",[R"<<SR<<"]"<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 81";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}

void CUasm::strr(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	int DR;
	int SR;
	byte_t sd;
	in_file.read((char*)&sd,sizeof(byte_t));
	DR=(sd&0xf0)>>4;
	SR=sd&0x0f;
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tSTRR  [R"<<dec<<DR<<"],R"<<SR<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 83";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}






//////////////////////////////////双字单操作数///////////////////////////////////
void CUasm::jmpa(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	byte_t ADR_L;
	byte_t ADR_H;
	byte_t ignore;
	in_file.read((char*)&ignore,sizeof(byte_t));        //忽略操作码之后的8位,以便于取操作数
	in_file.read((char*)&ADR_H,sizeof(byte_t));
    in_file.read((char*)&ADR_L,sizeof(byte_t));
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tJMPA  ";
	    if(int(ADR_H)<0x10||int(ADR_H)>=0xa0) 
			out_file<<hex<<"0"<<(int)ADR_H;
	    else
		    out_file<<hex<<(int)ADR_H;
	    if(int(ADR_L)<0x10)
		    out_file<<"0"<<(int)ADR_L;
	    else
		    out_file<<(int)ADR_L;
	    out_file<<"h"<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 80";
		if((int)ignore<0x10)out_file<<"0"<<hex<<(int)ignore;
		else out_file<<hex<<(int)ignore;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW ";
		if((int)ADR_H<0x10)out_file<<"0"<<hex<<(int)ADR_H;
		else out_file<<hex<<(int)ADR_H;
		if(int(ADR_L)<0x10)
		    out_file<<"0"<<(int)ADR_L;
	    else
		    out_file<<(int)ADR_L;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
	
}

void CUasm::cala(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	byte_t ADR_L;
	byte_t ADR_H;
	byte_t ignore;
	in_file.read((char*)&ignore,sizeof(byte_t));
	in_file.read((char*)&ADR_H,sizeof(byte_t));
    in_file.read((char*)&ADR_L,sizeof(byte_t));
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tCALA  ";
	if(int(ADR_H)<0x10||int(ADR_H)>=0xa0)
		out_file<<hex<<"0"<<(int)ADR_H;
	else
		out_file<<hex<<(int)ADR_H;
	if(int(ADR_L)<0x10)
		out_file<<"0"<<(int)ADR_L;
	else
		out_file<<(int)ADR_L;
	out_file<<"h"<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW ce";
		if((int)ignore<0x10)out_file<<"0"<<hex<<(int)ignore;
		else out_file<<hex<<(int)ignore;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW ";
		if((int)ADR_H<0x10)out_file<<"0"<<hex<<(int)ADR_H;
		else out_file<<hex<<(int)ADR_H;
		if(int(ADR_L)<0x10)
		    out_file<<"0"<<(int)ADR_L;
	    else
		    out_file<<(int)ADR_L;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
	
}


///////////////////////////双字双操作数/////////////////////////////////
void CUasm::mvrd(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	byte_t ADR_L;
	byte_t ADR_H;
	byte_t sd;
	int DR;
	in_file.read((char*) &sd,sizeof(byte_t));
	DR=(sd&(0xf0))>>4;
	in_file.read((char*)&ADR_H,sizeof(byte_t));
    in_file.read((char*)&ADR_L,sizeof(byte_t));
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<":  \tMVRD  R"<<dec<<DR<<" , ";
	if(int(ADR_H)<0x10||int(ADR_H)>=0xa0)
		out_file<<hex<<"0"<<(int)ADR_H;
	else
		out_file<<hex<<(int)ADR_H;
	if(int(ADR_L)<0x10)
		out_file<<"0"<<(int)ADR_L;
	else
		out_file<<(int)ADR_L;
	out_file<<"h"<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 88";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW ";
		if((int)ADR_H<0x10)out_file<<"0"<<hex<<(int)ADR_H;
		else out_file<<hex<<(int)ADR_H;
		if(int(ADR_L)<0x10)
		    out_file<<"0"<<(int)ADR_L;
	    else
		    out_file<<(int)ADR_L;
		out_file<<"h"<<endl;
	}

	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
	
}

////////////////////////////////////////////////////////////////
////////扩展指令
void CUasm::dw(ifstream& in_file,ofstream& out_file,ofstream& out_file1,byte_t instr)
{
	byte_t sd;
	in_file.read((char*)&sd,sizeof(byte_t));
//	out_file<<"\tDW   "<<hex<<(int)instr<<(int)sd<<(char)'h'<<endl;
    if(int(sd)<0x10) out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW   "<<hex<<(int)instr<<hex<<"0"<<(int)sd<<"h"<<endl;
	    else out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW   "<<hex<<(int)instr<<(int)sd<<(char)'h'<<endl;
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	out_file1<<"w  ";
	j=(j+1)%8;
	addr++;
}
void CUasm::adc(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	int DR;
	int SR;
	byte_t sd;
	in_file.read((char*)&sd,sizeof(byte_t));
	DR=(sd&0xf0)>>4;
	SR=sd&0x0f;                           //sd与0x0f按位与之后即得SR
	 
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tADC   R"<<dec<<DR<<", R"<<SR<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 20";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;

⌨️ 快捷键说明

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