📄 objcode.cpp
字号:
#include "common.h"
ObjItem ObjCodeHead;
ObjItem *CurrentCode=&ObjCodeHead;
char ObjCodeScript[GE+1][50]=
{
"LIT %d , %d ;装入常量",
"LOD %d , %d ;装入变量值",
"ILOD %d , %d ;间接装入",
"LODA %d , %d ;装入变量地址",
"LODT ;装入栈顶值为地址的内容",
"LODB %d , %d ;装入长度为A的块",
"STO ;将栈顶值存入栈顶次值所指单元",
"CPYB %d , %d ;传送长度为A的块",
"JMP %d , %d ;无条件跳转",
"JPC %d , %d ;栈顶值为0时跳转",
"READ %d , %d ;读指令",
"WRITE %d , %d ;写指令",
"CALL %d , %d ;转子",
"RETP ;过程返回",
"UDIS %d , %d ;调整Display",
"OPAC ;打开活动记录",
"ENTP %d , %d ;进入过程",
"ENDP ;程序结束",
"AND",
"OR",
"NOT",
"IMOD",
"MUS",
"ADD",
"SUB",
"MULT",
"IDIV",
"EQ==",
"NEQ!=",
"LSS ;<",
"LEQ ;<=",
"GTR ;>",
"GEQ ;>="
};
ObjItem *GenerateCode(int ins,int sop,int dop)
{
ObjItem *last;
static int line_number=1;
if(!CurrentCode)
{
Error(7);
exit(4);
}
CurrentCode->Instruction=ins;
CurrentCode->SrcOp=sop;
CurrentCode->DestOp.iValue=dop;
CurrentCode->Next=new ObjItem;
last=CurrentCode;
CurrentCode=CurrentCode->Next;
CurrentCode->Next=NULL;
CurrentCode->LineNum=line_number++;
#ifdef _DEBUG
printf("%d\t",line_number-2);
printf(ObjCodeScript[ins],sop,dop);
printf("\n");
#endif
return last;
}
void ClearObjCode()
{
ObjItem *current,*need_del;
for(current=ObjCodeHead.Next;current;)
{
need_del=current;
current=current->Next;
delete need_del;
}
}
void WriteCodeList(char *filename)
{
FILE *lst;
ObjItem *current;
lst=fopen(filename,"wt");
if(!lst)
Error(29);
for(current=&ObjCodeHead;current && current->Next;current=current->Next)
{
fprintf(lst,"%d\t",current->LineNum);
fprintf(lst,ObjCodeScript[current->Instruction],current->SrcOp,current->DestOp);
fprintf(lst,"\n");
}
fclose(lst);
}
void WriteObjCode(char *filename)
{
FILE *lst;
ObjItem *current;
lst=fopen(filename,"wb");
if(!lst)
Error(29);
for(current=&ObjCodeHead;current && current->Next;current=current->Next)
{
fwrite(¤t->Instruction,sizeof(int),1,lst);
fwrite(¤t->SrcOp,sizeof(int),1,lst);
fwrite(¤t->DestOp,sizeof(int),1,lst);
}
fclose(lst);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -