📄 uasm.cpp
字号:
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 + -