|
一个简单的C语言编译器(22) out<<"\tmov ah,02h"<<endl; out<<"\tint 21h"<<endl; out<<"\tret"<<endl; out<<"outint\tendp"<<endl; out<<endl; } out<<"main\tproc near"<<endl; out<<"\t;***CODE START***"<<endl; log<<"开始优化代码."<<endl; optimize(); log<<"优化代码完毕."<<endl; out<<code; log<<"写入目标代码."<<endl; out<<"\t;***CODE END***"<<endl; out<<"\tret"<<endl; out<<"main endp"<<endl; out<<endl; out<<"start:"<<endl; out<<"\tmov ax,@data"<<endl; out<<"\tmov ds,ax"<<endl; out<<"\tcall main"<<endl; out<<"\tlea dx,__end"<<endl; out<<"\tmov ah,09h"<<endl; out<<"\tint 21h"<<endl; out<<"\tmov ah,08h"<<endl; out<<"\tint 21h"<<endl; out<<"\tmov ah,4ch"<<endl; out<<"\tint 21h"<<endl; out<<"\tend start"<<endl; out.close(); log<<endl; log<<"代码生成完成!"<<endl; log<<"*******************************************"<<endl; } else { log<<endl; log<<"无法创建文件!"<<endl; log<<"*******************************************"<<endl; } // Label *q;//测试Label // for(int i=0;i<10;i++){ // q=new Label; // log<<q->text.c_str()<<endl; // delete q; // } return; } Compiler::err(int no,int line) { string errText; hasError=1; switch(no){ case 1:
|