资源简介
c语言实现简单的汇编器,通过汇编器译码并保存译码结果到文件中,然后通过模拟器来实现对计算机的简单模拟
宾夕法尼亚大学的c语言课设
代码片段和文件信息
#include
#include
#include
#include
#define MAX_LEN 200
#define INSTRS_COUNT (sizeof(g_instrs_name)/sizeof(g_instrs_name[0]))
#define INSTR_SYM {“HLT““JMP““CJMP““OJMP““CALL““RET““PUSH““POP“\
“LOADB““LOADW““STOREB““STOREW““LOADI““NOP““IN““OUT““ADD““ADDI“\
“SUB““SUBI““MUL““DIV““AND““OR““NOR““NOTB““SAL““SAR““EQU“\
“LT““LTE““NOTC“}
typedef struct var
{
char var_name[10];
int pianyi1;
int changdu;
unsigned char *length;
struct var *next;
}VAR; //用于表示变量的偏移量,变量的类型,变量所需要的内存大小
typedef struct label
{
char label_name[10];
int pianyi2;
struct label *next;
}LABEL; //用于表示标号的名字,及标号的地址
VAR *var_head=NULL;
LABEL *label_head=NULL;
const char *g_instrs_name[]=INSTR_SYM; /*定义存放指令记号的数组*/
const char instr_format[33]=“12222133444451667575777778778881“;/*定义存放指令格式的数组,下标对应指令码,7个数字字符代表七种指令格式*/
int GetInstrCode(const char *op_sym); /*由指令助记符得到指令代码*/
unsigned long TransToCode(char *instr_lineint instr_num);/*将指令翻译成目标代码,instr_num指令操作码*/
int GetRegNum(char *instr_linechar *reg_name);/*由寄存器名对应到编码*/
void CreatList(VAR**vhdLABEL**lhdFILE*pfIn);/*创建链表*/
int shuzu(char[10]);/*通过含有[]的字符串取出数组的大小*/
int fuzhi1(char s[MAX_LEN]unsigned char *pc);
int fuzhi2(char s[MAX_LEN]unsigned char *pc);/*数组元素赋值*/
LABEL* Findlabel(LABEL*label_hdchar s[20]);
VAR* Findvar(VAR*var_hdchar s[20]);
int main(int argcchar * *argv)
{
char a_line[MAX_LEN]; //用于存储一行的字符
char op_sym[8]; //用于存储助记符用于存储变量名字
int op_num; //用于表示助记符对应的操作码
int ilength_all=0; //pianyi用于标记偏移量
char *pcPos; //用于保存注释符的位置
VAR *pv=NULL;
unsigned long addr=0ul*shuju;
unsigned char *all;
FILE *pfIn*pfOut; //源文件,目标文件
int n;
if(argc<3)
{ /*检查命令行参数的数目*/
printf(“ERROR:no enough command line arguments!\n“);
return 0;
}
if((pfIn=fopen(argv[1]“r“))==NULL){ /*打开源代码文件*/
printf(“ERROR:cannot open file %s for reading!\n“argv[1]);
return 0;
}
if((pfOut=fopen(argv[2]“w“))==NULL){ /*打开目标代码文件*/
printf(“ERROR:cannot open file %s for writing!\n“argv[2]);
return 0;
}
CreatList(&var_head&label_headpfIn);/*第一次循环处理伪指令和标号,创建链表*/
pv=(VAR*)malloc(sizeof(VAR));
pv=var_head;
pfIn=fopen(argv[1]“r“);
while(!feof(pfIn))//第二次循环处理指令
{
fgets(a_lineMAX_LENpfIn);
if((pcPos=strchr(a_line‘#‘))!=NULL)
{
*pcPos=‘\0‘;
}
if((pcPos=strchr(a_line‘\n‘))!=NULL)
{
*pcPos=‘\0‘;
}
if((pcPos=strstr(a_line“WORD“))!=NULL)
{
continue;
}
else if((pcPos=strstr(a_line“BYTE“))!=NULL)
{
continue;
}
else if((pcPos=strchr(a_line‘:‘))!=NULL)
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1041 2014-03-16 21:37 copy.txt
文件 9733 2014-03-16 21:37 queen.txt
文件 199 2014-03-30 18:45 readme.txt
目录 0 2014-03-30 18:41 sas\
目录 0 2014-03-16 21:37 sas\bin\
目录 0 2014-03-30 18:41 sas\bin\Debug\
文件 41970 2014-03-16 21:37 sas\bin\Debug\sas.exe
文件 168 2014-03-16 21:37 sas\copy.dat
文件 1041 2014-03-16 21:37 sas\copy.txt
文件 15429 2014-03-16 21:37 sas\main.c
目录 0 2014-03-30 18:39 sas\obj\
目录 0 2014-03-30 18:41 sas\obj\Debug\
文件 14381 2014-03-30 18:39 sas\obj\Debug\main.o
文件 9733 2014-03-16 21:37 sas\queen.txt
文件 1111 2014-03-17 00:34 sas\sas.cbp
文件 445 2014-03-16 21:40 sas\sas.depend
文件 321 2014-03-17 00:34 sas\sas.layout
目录 0 2014-03-30 18:41 ssim\
目录 0 2014-03-16 21:37 ssim\bin\
目录 0 2014-03-30 18:41 ssim\bin\Debug\
文件 37773 2014-03-16 21:37 ssim\bin\Debug\ssim.exe
文件 360 2014-03-16 21:37 ssim\copy.dat
文件 8287 2014-03-16 21:37 ssim\main.c
目录 0 2014-03-16 21:37 ssim\obj\
目录 0 2014-03-30 18:41 ssim\obj\Debug\
文件 16666 2014-03-16 21:37 ssim\obj\Debug\main.o
文件 1872 2014-03-16 21:37 ssim\queen.dat
文件 1088 2014-03-16 21:37 ssim\ssim.cbp
文件 428 2014-03-16 21:37 ssim\ssim.depend
文件 241 2014-03-16 21:37 ssim\ssim.layout
- 上一篇:C++ 控制台 扫雷 鼠标输入
- 下一篇:三国杀代码
相关资源
- C语言实现统计文章的单词数目实验报
- K-Means K均值C语言实现 里面有个小
- C语言实现线性方程组求解
- 学生成绩管理系统C语言实现
- GB2312编码和UTF-8互转c语言实现
- 信息熵的C语言实现
- 0-1背包问题分支界限法求解-C语言实现
- Dijkstra最短路径算法C语言实现
- 单片机C语言实现流水灯,跑马灯仿真
- MD5 摘要算法C语言实现
- 背包问题的贪心法C语言实现
- 链表实现多项式加法和乘法C语言实现
- Buddy算法C语言实现
- 汉明码的编码译码的C语言实现
- FFT算法的c语言实现
- 游程编码C语言实现
- 最速下降法c语言实现
- 计网实验 数据链路层实验 源代码 C语
- 有限元的C语言实现计算
- 用C语言实现的的全部的古典密码学算
- c语言实现稀疏矩阵的加减乘,转置
- 停车场管理系 C语言实现停车场管理
- 用C语言实现高斯-赛德尔迭代方法
- 用C语言实现图形菜单界面
- 实验3 C语言实现RC4加密算法报告
- C语言实现DES算法对任意文件加解密报
- NFA到DFA的转换C语言实现
- c语言实现pl0编译器的扩充
- c语言实现图像的旋转与平移
- Kruskal C语言实现
评论
共有 条评论