亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? code.cpp

?? PL/0編譯器
?? CPP
字號:
#include "StdAfx.h"
#include ".\code.h"
#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

CCode::CCode(CPl0*p)
{
	cx = 0;
	pl=p;
}

/*目標(biāo)代碼生成過程gen 
  參數(shù):x:要生成的一行代碼的助記符 
  y, z:代碼的兩個操作數(shù) 
  本過程用于把生成的目標(biāo)代碼寫入目標(biāo)代碼數(shù)組,供后面的解釋器解釋執(zhí)行 */
void CCode::Gen(enum fct x,int y,int z)
{
	if (cx<CODE_SIZE)				//如果cx>cxmax表示當(dāng)前生成的代碼行號大于允許的最大代碼行數(shù)
	{
		code[cx].f=x;
		code[cx].l=y;
		code[cx].a=z;
		cx++;						//移動cx指針指向下一個空位
	}
}

/* 通過靜態(tài)鏈求出數(shù)據(jù)區(qū)基地址的函數(shù)base
   參數(shù)說明:l:要求的數(shù)據(jù)區(qū)所在層與當(dāng)前層的層差
   返回值:要求的數(shù)據(jù)區(qū)基址 */
int CCode::base(int l)
{
	int b1;
	b1=b;							//首先從當(dāng)前層開始
	while (l>0)
	{
		b1=s[b1];					//用當(dāng)前層數(shù)據(jù)區(qū)基址中的內(nèi)容(正好是靜態(tài)鏈SL數(shù)據(jù),為上一層的基址)
									//的作為新的當(dāng)前層,即向上找了一層
		l--;						//向上了一層,l減一
	}
	return b1;						//把找到的要求的數(shù)據(jù)區(qū)基址返回
}

void CCode::Interpret()
{
	int p,t;
	fct f;
	int l,a;

	t=0;b=1;p=0;					//程序開始運行時棧頂寄存器置0,數(shù)據(jù)段基址為1,從0號代碼開始執(zhí)行程序
	s[1]=0;s[2]=0;s[3]=0;			//數(shù)據(jù)內(nèi)存中為SL,DL,RA三個單元均為0,標(biāo)識為主程序 
	do{
		f=code[p].f;l=code[p].l;a=code[p].a;	// 獲取一行目標(biāo)代碼
		p++;						//指令指針加一,指向下一條代碼
		switch (f)					//如果i的f,即指令助記符是下面的某種情況,執(zhí)行不同的功能
		{
		case lit:
			s[++t]=a;				//棧頂指針上移,在棧中分配了一個單元
			break;					//該單元的內(nèi)容存放i指令的a操作數(shù),即實現(xiàn)了把常量值放到運行棧棧頂 
		case opr:
			switch (a)
			{
			case 0:
				t=b-1;				//釋放這段子過程占用的數(shù)據(jù)內(nèi)存空間
				p=s[t+3];			//把指令指針取到RA的值,指向的是返回地址
				b=s[t+2];			//把數(shù)據(jù)段基址取到DL的值,指向調(diào)用前子過程的數(shù)據(jù)段基址
				break;
			case 1:
				s[t]=-s[t];			//對棧頂數(shù)據(jù)進行取反
				break;
			case 2:	
				t--;
				s[t]=s[t]+s[t+1];	//把兩單元數(shù)據(jù)相加存入棧頂
				break;
			case 3:	
				t--;
				s[t]=s[t]-s[t+1];	//把兩單元數(shù)據(jù)相減存入棧頂
				break;
			case 4:	t--;
				s[t]=s[t]*s[t+1];	//把兩單元數(shù)據(jù)相乘存入棧頂
				break;
			case 5:	
				t--;
				s[t]=s[t]/s[t+1];	//把兩單元數(shù)據(jù)相整除存入棧頂
				break;
			case 6:
				s[t]=s[t]%2;		//數(shù)據(jù)棧頂?shù)闹凳瞧鏀?shù)則把棧頂值置1,否則置0
				break;
			case 8:	
				t--;
				s[t]=(s[t]==s[t+1]);//判等,相等棧頂置1,不等置0 
				break;
			case 9:	
				t--;
				s[t]=(s[t]!=s[t+1]);//判不等,不等棧頂置1,相等置0
				break;
			case 10: 
				t--;
				s[t]=(s[t]<s[t+1]); //判小于,如果下面的值小于上面的值,棧頂置1,否則置0
				break;
			case 11: 
				t--;
				s[t]=(s[t]>=s[t+1]);//判大于等于,如果下面的值大于等于上面的值,棧頂置1,否則置0
				break;
			case 12: 
				t--;
				s[t]=(s[t]>s[t+1]); //判大于,如果下面的值大于上面的值,棧頂置1,否則置0
				break;
			case 13: 
				t--;
				s[t]=(s[t]<=s[t+1]);//判小于等于,如果下面的值小于等于上面的值,棧頂置1,否則置0
				break;
			case 14:
				cout<<s[t]<<"\t";	//輸出棧頂值
				break;
			case 15:
				cout<<"\n";			//輸出換行
				break;
			case 16:
				t++;
				cout<<"?";
				cin>>s[t];			//16號操作是接受鍵盤值輸入到棧頂
				break;
			}
			break;
		case lod:					//如果是lod指令:將變量放到棧頂
			t++;					//棧頂上移,開辟空間
			s[t]=s[base(l)+a];		//通過數(shù)據(jù)區(qū)層差l和偏移地址a找到變量的數(shù)據(jù),存入上面開辟的新空間(即棧頂)
			break;
		case sto:
			s[base(l)+a]=s[t];		//把棧頂?shù)闹荡嫒胛恢迷跀?shù)據(jù)區(qū)層差l偏移地址a的變量內(nèi)存
			t--;					//棧項下移,釋放空間
			break;
		case cal:
			//過程調(diào)用前的保護現(xiàn)場
			s[t+1]=base(l);			//在棧頂壓入靜態(tài)鏈SL
			s[t+2]=b;				//然后壓入當(dāng)前數(shù)據(jù)區(qū)基址,作為動態(tài)鏈DL
			s[t+3]=p;				//最后壓入當(dāng)前的斷點,作為返回地址RA
			b=t+1;					//把當(dāng)前數(shù)據(jù)區(qū)基址指向SL所在位置
			p=a;					//從a所指位置開始繼續(xù)執(zhí)行指令,即實現(xiàn)了程序執(zhí)行的跳轉(zhuǎn)
			break;
		case tint:
			t+=a;					//棧頂上移a個空間,即開辟a個新的內(nèi)存單元
			break;
		case jmp:
			p=a;					//把jmp指令操作數(shù)a的值作為下一次要執(zhí)行的指令地址,實現(xiàn)無條件跳轉(zhuǎn)
			break;
		case jpc:
			if (s[t]==0)			//判斷棧頂值
				p=a;				//如果是0就跳轉(zhuǎn),否則不跳轉(zhuǎn)
			t--;					//釋放棧頂空間
			break;
		}
	}while (p!=0);
}

//逐行輸出代碼
void CCode::ListCode()
{
	FILE *fp;
	//int i;
	char c[1];
	char *filename = pl->flnm;

	strcat(filename,".txt");

	if((fp=fopen(filename,"wb"))==NULL)
	{
		printf("cant open the file");
		exit(0);
	}

	for (int i=0;i<cx;i++)
	{
		cout<<i<<"  ";
		switch (code[i].f)
		{
		case lit:
			cout<<"lit\t";
			fwrite("lit  ",sizeof(char),strlen("lit  "),fp);
			break;
		case lod:
			cout<<"lod\t";
			fwrite("lod  ",sizeof(char),strlen("lod  "),fp);
			break;
		case sto:
			cout<<"sto\t";
			fwrite("sto  ",sizeof(char),strlen("sto  "),fp);
			break;
		case cal:
			cout<<"cal\t";
			fwrite("cal  ",sizeof(char),strlen("cal  "),fp);
			break;
		case tint:
			cout<<"int\t";
			fwrite("int  ",sizeof(char),strlen("int  "),fp);
			break;
		case jmp:
			cout<<"jmp\t";
			fwrite("jmp  ",sizeof(char),strlen("jmp  "),fp);
			break;
		case jpc:
			cout<<"jpc\t";
			fwrite("jpc  ",sizeof(char),strlen("jpc  "),fp);
			break;
		case opr:
			cout<<"opr\t";
			fwrite("opr  ",sizeof(char),strlen("opr  "),fp);
			break;
		}
		cout<<code[i].l<<"\t"<<code[i].a<<endl;
		c[0] = static_cast<char>('0'+ code[i].l);
		fwrite(c,sizeof(char),1,fp);
		fwrite("  ",sizeof(char),strlen("  "),fp);
		if(code[i].a >= 10)
		{
			c[0] = static_cast<char>('0'+ code[i].a / 10);
			fwrite(c,sizeof(char),1,fp);
		}
		c[0] = static_cast<char>('0'+ code[i].a%10);
		fwrite(c,sizeof(char),1,fp);
		fwrite("\t\t",sizeof(char),strlen("\t\t"),fp);
	}
}

CCode::~CCode(void)
{
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品免费国产一区二区三区四区| 成人动漫一区二区| 91精品国产乱| 久久aⅴ国产欧美74aaa| 久久综合网色—综合色88| 国产伦精品一区二区三区在线观看| 久久久国产精品麻豆| 成人动漫一区二区| 亚洲第一福利一区| 欧美电视剧在线观看完整版| 国产成人福利片| 亚洲精品v日韩精品| 欧美久久高跟鞋激| 国产一区二区导航在线播放| 国产精品成人免费在线| 欧美在线免费观看视频| 美女视频网站黄色亚洲| 中文字幕av一区 二区| 欧洲国内综合视频| 美女被吸乳得到大胸91| 国产精品女主播av| 3d动漫精品啪啪1区2区免费| 国产成人三级在线观看| 亚洲一区二区三区自拍| 精品日韩一区二区| 色悠悠亚洲一区二区| 麻豆国产欧美日韩综合精品二区 | 成人久久18免费网站麻豆| 亚洲天堂av一区| 日韩一区二区免费在线观看| 粉嫩av亚洲一区二区图片| 亚洲一区在线视频| 久久精品综合网| 欧美人妖巨大在线| 北条麻妃一区二区三区| 喷水一区二区三区| 亚洲综合在线电影| 久久精品人人做人人综合| 欧美日韩综合色| 成人免费观看视频| 久久国产人妖系列| 亚洲一区二区三区中文字幕| 国产无人区一区二区三区| 欧美日本在线视频| 91毛片在线观看| 国产91丝袜在线播放九色| 日本不卡中文字幕| 亚洲线精品一区二区三区八戒| 国产欧美日韩三级| 欧美电视剧在线看免费| 欧美人与性动xxxx| 欧美体内she精高潮| av一区二区三区在线| 国产精品18久久久久久久久 | 日本韩国一区二区三区视频| 成人中文字幕在线| 狠狠色狠狠色综合系列| 日韩成人精品在线观看| 亚洲国产另类av| 一区二区三区在线视频观看58| 国产精品精品国产色婷婷| 国产欧美日本一区视频| 精品国产一区二区三区四区四| 91麻豆精品国产91久久久久久| 欧美日韩亚洲高清一区二区| 色偷偷88欧美精品久久久| 成人av手机在线观看| 成人一区在线观看| 成人爽a毛片一区二区免费| 国产一区在线观看麻豆| 激情亚洲综合在线| 国产综合成人久久大片91| 蜜臀久久99精品久久久久久9| 视频在线观看国产精品| 日韩精品电影在线观看| 日韩高清在线一区| 日韩电影在线观看网站| 蜜臀av性久久久久蜜臀aⅴ| 热久久久久久久| 久久精品国产亚洲高清剧情介绍 | 日韩美女视频一区二区在线观看| 欧美一区二区三区小说| 日韩一级免费一区| 精品入口麻豆88视频| 久久婷婷久久一区二区三区| 国产亚洲成aⅴ人片在线观看 | 亚洲曰韩产成在线| 日韩在线a电影| 久久99精品视频| 国产福利91精品一区| 国产成人综合亚洲网站| 成人国产亚洲欧美成人综合网 | 精品一二线国产| 国产麻豆一精品一av一免费| 成人午夜激情在线| 91在线观看地址| 制服丝袜中文字幕亚洲| 久久综合九色综合97婷婷女人| 国产精品天天看| 一区二区三区在线观看视频| 免费观看在线综合| 国产v日产∨综合v精品视频| 一本大道av一区二区在线播放 | 国产精华液一区二区三区| 97精品久久久午夜一区二区三区 | 色88888久久久久久影院按摩| 欧美人与z0zoxxxx视频| 2023国产精品视频| 综合色中文字幕| 理论片日本一区| 成+人+亚洲+综合天堂| 欧美久久久久久蜜桃| 国产午夜精品一区二区三区视频 | 国内久久精品视频| 91在线观看视频| 日韩免费高清电影| 亚洲视频一区二区免费在线观看| 日韩激情一二三区| 不卡视频免费播放| 91精品国产综合久久精品麻豆| 国产片一区二区| 日韩成人一区二区| 色综合天天狠狠| 精品欧美乱码久久久久久1区2区| 亚洲男人的天堂av| 国产在线播放一区| 欧美日韩精品免费观看视频| 亚洲国产成人在线| 麻豆精品一区二区| 欧美性感一区二区三区| 欧美国产日产图区| 日本aⅴ精品一区二区三区 | 亚洲欧美二区三区| 国产精品12区| 欧美一区日韩一区| 一区二区激情小说| 国产91精品在线观看| 日韩视频免费观看高清在线视频| 亚洲视频在线观看三级| 国产成人精品1024| 亚洲色图制服丝袜| 国产一区二区女| 日韩欧美国产综合一区| 亚洲大型综合色站| 91黄色在线观看| 中文字幕一区av| 成人一区在线观看| 国产欧美视频一区二区| 韩国成人在线视频| 日韩欧美国产综合在线一区二区三区| 亚洲一区二区三区免费视频| 91在线观看地址| 亚洲天堂2014| 色综合久久中文字幕综合网| 亚洲高清一区二区三区| 在线亚洲+欧美+日本专区| 欧美激情中文不卡| 国产suv一区二区三区88区| 久久久久久久综合色一本| 紧缚奴在线一区二区三区| 日韩欧美一级二级三级久久久| 日韩国产欧美在线播放| 欧美一区二区三区在线观看视频| 天堂成人免费av电影一区| 欧美日韩综合一区| 日韩高清不卡一区二区三区| 91精品国产高清一区二区三区蜜臀 | 国产精品丝袜在线| 国产成人精品亚洲777人妖| 久久久久久一二三区| 国产盗摄一区二区三区| 国产亚洲精品aa午夜观看| 成人av电影免费在线播放| 亚洲视频精选在线| 欧美性猛交一区二区三区精品| 亚洲成人动漫在线观看| 91精品国产麻豆| 国产精品综合网| 中文字幕一区三区| 欧美在线观看视频在线| 日韩精品亚洲一区| 精品国产免费一区二区三区四区| 国产主播一区二区| 国产精品久久看| 欧美日韩一区视频| 看电影不卡的网站| 国产三级精品在线| 日本乱码高清不卡字幕| 三级在线观看一区二区| 精品国产乱码久久久久久蜜臀 | 免费成人av在线播放| 久久婷婷色综合| 色综合久久久久综合体| 午夜精品视频一区| 久久色在线观看| 色哦色哦哦色天天综合| 青青草一区二区三区| 国产精品毛片a∨一区二区三区| 欧美在线free| 激情都市一区二区|