資源簡介
匯編指令-->機器碼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
評論
共有 條評論