资源简介
汇编指令-->机器码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
相关资源
- c++编写的卡诺图绘制程序
- win sockket全局代理驱动(c++ spi)
- matlab中meshgrid()、fspecial()以及
- C++ 数据结构 算法B+树实现
- SEGD文件读取C++源代码
- RBF神经网络的C++源码
- 模拟银行排队叫号机 VC++6
- DDOS攻击源代码 VC++6
-
c++ xm
l处理 domsax - 数据结构十字链表C++
- A-Star算法完整版,c++源码实现
- udp 泛洪攻击vc++源码
- 日本葵花卫星himawari8数据投影程序
- c++局域网聊天室软件
- C++编写的多叉树结构
- 行人检测C++代码
- CMAES算法C++
- C++实现的欧拉放大代码
- Harris角点检测算法实现C++
- Cygnus C++ 2.91.57中所有的头文件侯捷,
- 在串str中查找字串substr最后一次出现
- C++实现的PPI计算器
- 图像处理,C++,C语言。二值化,灰度
- c++课程设计之图书管理系统
- 学生信息管理系统(C++)
- 遗传算法求函数最大值,C++实现
- 基于C++数据结构编写的航空订票系统
- 基于C++的端口扫描
- 基于VC++6.0的四杆机构运动仿真软件
- 遗传算法c++代码,车间调度
评论
共有 条评论