资源简介

汇编指令-->机器码101010…… 在cmd中命令格式:ns 输入文件例: add $1,$2,$3 X1: sub $3,4,$3 cmp $3,$1 blet X1 sysint 1 寄存器格式为:$x 立即数支持十进制 支持行标号 可以检测错误的指令字和行标号

资源截图

代码片段和文件信息

#include
#include
#include
using namespace std;

#define TOTALNUM 50
#define RNUM 15
#define JNUM 23
#define INUM 46
#define MAXWL 6
#define CODEL 6
#define MXLBNUM 5
#define MXLBL 5

#define NOTINDX 46
#define LHIINDX 47
#define CMPINDX 48
#define SYSINDX 49

char name[TOTALNUM][MAXWL+1]code[TOTALNUM][CODEL+1]functcode[RNUM][CODEL+1];
char label[MXLBNUM][MXLBL+1];
int labelloc[MXLBNUM];
/*
int match(char *list[]char *t)
{
for(int i=0;i if(strcmp(tlist[i])==0)return i;
return -1;
}
*/
void toBin(char *binint lenint dec) //decimal to signed binary of len digits
{
int tIndex=lentNum=dectDig;
tNum=(tNum<0)?-tNum:tNum;
for(int i=0;i while(tNum>0)
{
tDig=(tNum%2)+48;
tNum/=2;
tIndex--;
bin[tIndex]=tDig;
}
bin[len]=‘\0‘;
if(dec<0)
{
for(int i=0;i bin[i]=(bin[i]==‘0‘?‘1‘:‘0‘); //若是负数,逐位取反再加一
bool c=true;
for(int i=len-1;i>=0;i--)
{
if(!c)break;
if(bin[i]==‘1‘)bin[i]=‘0‘;
else {bin[i]=‘1‘; c=false;}
}
}
}

void main(int argcchar **argv)
{
fstream rulefileinfileoutfile;
rulefile.open(argv[1]ios_base::in);
infile.open(argv[2]ios_base::in);
outfile.open(argv[3]ios_base::out);
if(!rulefile){cout<<“no rule file!“< for(int i=0;i rulefile>>name[i]>>code[i];
for(int i=0;i rulefile>>name[i]>>functcode[i];

char tname[MAXWL+1]*tInstr*stRegch[6]tAddrch[27]tcode[33]tImmch[17]; //match instruction or label
char blank5[6]=“00000“blank16[17]=“0000000000000000“;
tInstr=new char(30);s=tInstr;
int indexlabelindex=0instrIndex=0;
int tRegtImm;
while(!infile.eof()) //搜索行标号并存储
{
infile>>tname;
index=-1;
for(int i=0;i {
if(strcmp(tnamename[i])==0){index=i;break;}
}
if(index==-1)
{
tname[strlen(tname)-1]=‘\0‘; //delete ‘:‘
strcpy(label[labelindex]tname);
labelloc[labelindex++]=instrIndex;
continue;
}
else
infile>>tInstr;
instrIndex++;
}

infile.close();
infile.clear();
infile.open(argv[2]ios_base::in);
instrIndex=0;
while(!infile.eof())
{
infile>>tname;
index=-1;
for(int i=0;i {
if(strcmp(tnamename[i])==0){index=i;break;}
}
if(index==-1)continue;
else
{
tcode[0]=‘\0‘;
strcat(tcodecode[index]); //output binary code
infile>>tInstr;
if(index {
tInstr++;
sscanf(tInstr“%d“&tReg);
toBin(tRegch5tReg);
strcat(tcodetRegch);
tInstr+=(tReg>9?4:3);
sscanf(tInstr“%d“&tReg);
toBin(tRegch5tReg);
strcat(tcodetRegch);
tInstr+=(tReg>9?4:3);
sscanf(tInstr“%d“&tReg);
toBin(tRegch5tReg);
strcat(tcodetRegch);
strcat(tcodeblank5);
strcat(tcodefunctcode[index]);
}
else if(index {
int tindex=-1;
for(int i=0;i {
if(strcmp(tIns

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4746  2009-01-17 13:46  ns.cpp

     文件        253  2009-01-16 18:03  note.txt

     文件        136  2009-01-17 04:04  out.txt

     文件        861  2009-01-16 12:53  rule.txt

     文件         50  2009-01-17 04:00  in.txt

----------- ---------  ---------- -----  ----

                 6046                    5


评论

共有 条评论