📄 uasm.cpp
字号:
addr++;
}
void CUasm::sbb(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<<": \tSBB 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 21";
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::rcl(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
int DR;
byte_t sd;
in_file.read((char*) &sd, sizeof(byte_t));
DR=(sd&(0xf0))>>4;
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<<": \tRCL R"<<dec<<DR<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 2A";
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::rcr(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
int DR;
byte_t sd;
in_file.read((char*) &sd, sizeof(byte_t));
DR=(sd&(0xf0))>>4;
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<<": \tRCR R"<<dec<<DR<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 2B";
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::asr(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
int DR;
byte_t sd;
in_file.read((char*) &sd, sizeof(byte_t));
DR=(sd&(0xf0))>>4;
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<<": \tASR R"<<dec<<DR<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 2C";
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::not(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
int DR;
byte_t sd;
in_file.read((char*) &sd, sizeof(byte_t));
DR=(sd&(0xf0))>>4;
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<<": \tNOT R"<<dec<<DR<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 2D";
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::jmpr(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
int DR;
byte_t sd;
in_file.read((char*) &sd, sizeof(byte_t));
DR=(sd&(0xf0))>>4;
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<<": \tJMPR R"<<dec<<DR<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 60";
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::jrs(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
char OFFSET; //OFFSET用于存放跳转偏移量
in_file.read((char*) &OFFSET,sizeof(byte_t));
char myout[4];
unsigned short my=OFFSET+addr+1;
sprintf(myout,"%4.4X",my);
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<<": \tJRS "<<myout<<'h'<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 64";
if((int)OFFSET<0x10)out_file<<"0"<<hex<<(int)OFFSET;
else out_file<<hex<<(int)OFFSET;
out_file<<"h"<<endl;
}
else out_file1<<"# ";
j=(j+1)%8;
addr++;
}
void CUasm::jrns(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
char OFFSET; //OFFSET用于存放跳转偏移量
in_file.read((char*) &OFFSET,sizeof(byte_t));
char myout[4];
unsigned short my=OFFSET+addr+1;
sprintf(myout,"%4.4X",my);
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<<": \tJRNS "<<myout<<'h'<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 65";
if((int)OFFSET<0x10)out_file<<"0"<<hex<<(int)OFFSET;
else out_file<<hex<<(int)OFFSET;
out_file<<"h"<<endl;
}
else out_file1<<"# ";
j=(j+1)%8;
addr++;
}
void CUasm::clc(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
byte_t single;//
in_file.read((char*)&single,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<<": \tCLC"<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 6C";
if((int)single<0x10)out_file<<"0"<<hex<<(int)single;
else out_file<<hex<<(int)single;
out_file<<"h"<<endl;
}
else out_file1<<"# ";
j=(j+1)%8;
addr++;
}
void CUasm::stc(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
byte_t single;//
in_file.read((char*)&single,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<<": \tSTC"<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 6D";
if((int)single<0x10)out_file<<"0"<<hex<<(int)single;
else out_file<<hex<<(int)single;
out_file<<"h"<<endl;
}
else out_file1<<"# ";
j=(j+1)%8;
addr++;
}
void CUasm::ei(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
byte_t single;//
in_file.read((char*)&single,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<<": \tEI"<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 6E";
if((int)single<0x10)out_file<<"0"<<hex<<(int)single;
else out_file<<hex<<(int)single;
out_file<<"h"<<endl;
}
else out_file1<<"# ";
j=(j+1)%8;
addr++;
}
void CUasm::di(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
byte_t single;//
in_file.read((char*)&single,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<<": \tDI"<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 6F";
if((int)single<0x10)out_file<<"0"<<hex<<(int)single;
else out_file<<hex<<(int)single;
out_file<<"h"<<endl;
}
else out_file1<<"# ";
j=(j+1)%8;
addr++;
}
void CUasm::calr(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
int DR;
byte_t sd;
in_file.read((char*) &sd, sizeof(byte_t));
DR=(sd&(0xf0))>>4;
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<<": \tCALR R"<<dec<<DR<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW E0";
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::ldra(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<<": \tLDRA 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 E4";
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::ldrx(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
byte_t ADR_L;
byte_t ADR_H;
byte_t sd;
int DR;
int SR;
in_file.read((char*) &sd,sizeof(byte_t));
SR=(sd&(0x0f));
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<<": \tLDRX 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"<<'[';
out_file<<"R"<<dec<<DR<<']'<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW E5";
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::strx(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
byte_t ADR_L;
byte_t ADR_H;
byte_t sd;
int DR;
int SR;
in_file.read((char*) &sd,sizeof(byte_t));
SR=(sd&(0x0f));
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<<": \tSTRX 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"<<'[';
out_file<<"R"<<dec<<DR<<']'<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW E6";
if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
else out_file<<hex<<(int)sd;
out_file<<"h"<<endl;
}
else out_file1<<"# ";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -