资源简介
汇编指令-->机器码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++获取计算机的CPU ID,硬盘序列号等
- C++头文件转delphi工具 + 源码
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
川公网安备 51152502000135号
评论
共有 条评论