📄 uasm.cpp
字号:
//
//
#include "Stdafx.h"
#include "Uasm.h"
#include "stdio.h"
#include<string.h>
// ////////////////////////单字无操作数////////////////////////////
void CUasm::pshf(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
byte_t single;
in_file.read((char*)&single,sizeof(byte_t));//取出单字无操作数操作码后的8个0
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<<": \tPSHF"<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 84";
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::popf(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<<": \tPOPF"<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 8c";
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::ret(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<<": \tRET"<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 8f";
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::Dec(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
int DR; //存放所用的积存器号
byte_t sd;
in_file.read((char*) &sd, sizeof(byte_t));//将DR0000一起取出存在sd中
DR=(sd&(0xf0))>>4; //按位与之后右移四位即可得DR
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<<": \tDEC 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 08";
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::inc(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<<": \tINC 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 09";
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::shl(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<<": \tSHL 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 0A";
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::shr(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<<": \tSHR 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 0B";
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::push(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
int SR;
byte_t sd;
in_file.read((char*) &sd, sizeof(byte_t));
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<<": \tPUSH R"<<dec<<SR<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 85";
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::pop(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<<": \tPOP 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 87";
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::jr(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<<": \tJR "<<myout<<'h'<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 41";
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::jrc(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<<": \tJRC "<<myout<<'h'<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 44";
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::jrnc(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<<": \tJRNC "<<myout<<'h'<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 45";
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::jrz(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<<": \tJRZ "<<myout<<'h'<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 46";
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::jrnz(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<<": \tJRNZ "<<myout<<'h'<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 47";
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::in(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
byte_t PORT; //PORT用于存放端口号
in_file.read((char*) &PORT,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<<": \tIN "<<hex<<(int)PORT<<'h'<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 82";
if((int)PORT<0x10)out_file<<"0"<<hex<<(int)PORT;
else out_file<<hex<<(int)PORT;
out_file<<"h"<<endl;
}
else out_file1<<"# ";
j=(j+1)%8;
addr++;
}
void CUasm::out(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
byte_t PORT;
in_file.read((char*) &PORT,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<<": \tOUT "<<hex<<(int)PORT<<'h'<<endl;
out_file1<<"p ";
}
else if(sign[addr-address]==2)
{
out_file1<<"w ";
out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 86";
if((int)PORT<0x10)out_file<<"0"<<hex<<(int)PORT;
else out_file<<hex<<(int)PORT;
out_file<<"h"<<endl;
}
else out_file1<<"# ";
j=(j+1)%8;
addr++;
}
///////////////////////////单字双操作数基本指令////////////////////////////////
void CUasm::add(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<<": \tADD 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 00";
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::sub(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
int DR;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -