⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpu.cpp

📁 C++实现的模拟操作系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	if(a==0)
		return psw[0];
	if(a==1)
		return psw[1];
	if(a==2)
		return psw[2];
	MessageBox(NULL,"调用CpuGetpsw函数的参数超出范围","警告",MB_OK);
	return -1;
}
/////////////////////////////////////////////////////////////////////
//设置psw
/////////////////////////////////////////////////////////////////////
void CCpu::CpuSetpsw(int a,int b){  //设置psw的第a个的值
	if(a>=0&&a<=2)
		psw[a]=b;
	else
	MessageBox(NULL,"调用CpuSetpsw函数的参数超出范围","警告",MB_OK);
}
		
//////////////////////////////////////////////////////////////////////
//加法模拟
//////////////////////////////////////////////////////////////////////
void CCpu::CpuAdd(CString a,CString b){
	if(a.Compare("ax")&&b.Compare("bx")){
		ax=ax+bx;
		pdlg->m_strdictate.Format("ADD %s,%s",a,b);
	}
	else if(a.Compare("ax")&&b.Compare("cx")){
		ax=ax+cx;
		pdlg->m_strdictate.Format("ADD %s,%s",a,b);
	}
	else if(a.Compare("bx")&&b.Compare("cx")){
		bx=bx+cx;
		pdlg->m_strdictate.Format("ADD %s,%s",a,b);
	}
	else if(a.Compare("bx")&&b.Compare("ax")){
		bx=bx+ax;
		pdlg->m_strdictate.Format("ADD %s,%s",a,b);
	}
	else if(a.Compare("cx")&&b.Compare("ax")){
		cx=cx+ax;
		pdlg->m_strdictate.Format("ADD %s,%s",a,b);
	}
	else if(a.Compare("cx")&&b.Compare("bx")){
		cx=cx+bx;
		pdlg->m_strdictate.Format("ADD %s,%s",a,b);
	}
	pdlg->Updatashow();
	
}
//////////////////////////////////////////////////////////////////////
void CCpu::CpuAdd(CString a,int b){
	if(!a.Compare("ax")){
		ax=ax+b;
		pdlg->m_strdictate.Format("ADD %s,%d",a,b);
	}
	else if(!a.Compare("bx")){
		bx=bx+b;
		pdlg->m_strdictate.Format("ADD %s,%d",a,b);
	}
	else if(!a.Compare("cx")){
		cx=cx+b;
		pdlg->m_strdictate.Format("ADD %s,%d",a,b);
	}
	pdlg->Updatashow();
}
/////////////////////////////////////////////////////////////////////
//减法模拟
/////////////////////////////////////////////////////////////////////
void CCpu::CpuSub(CString a,CString b){
	if(!a.Compare("ax")&&b.Compare("bx")){
		ax=ax-bx;
		pdlg->m_strdictate.Format("SUB %s,%s",a,b);
	}
	else if(!a.Compare("ax")&&b.Compare("cx")){
		ax=ax-cx;
		pdlg->m_strdictate.Format("SUB %s,%s",a,b);
	}
	else if(!a.Compare("bx")&&b.Compare("cx")){
		bx=bx-cx;
		pdlg->m_strdictate.Format("SUB %s,%s",a,b);
	}
	else if(!a.Compare("bx")&&b.Compare("ax")){
		bx=bx-ax;
		pdlg->m_strdictate.Format("SUB %s,%s",a,b);
	}
	else if(!a.Compare("cx")&&b.Compare("ax")){
		cx=cx-ax;
		pdlg->m_strdictate.Format("SUB %s,%s",a,b);
	}
	else if(!a.Compare("cx")&&b.Compare("bx")){
		cx=cx-bx;
		pdlg->m_strdictate.Format("SUB %s,%s",a,b);
	}
	pdlg->Updatashow();
}
////////////////////////////////////////////////////////////////////
void CCpu::CpuSub(CString a,int b){
	if(!a.Compare("ax")){
		ax=ax-b;
		pdlg->m_strdictate.Format("SUB %s,%d",a,b);
	}
	else if(!a.Compare("bx")){
		bx=bx-b;
		pdlg->m_strdictate.Format("SUB %s,%d",a,b);
	}
	else if(!a.Compare("cx")){
		cx=cx-b;
		pdlg->m_strdictate.Format("SUB %s,%d",a,b);
	}
	pdlg->Updatashow();
}
////////////////////////////////////////////////////////////////////
//模拟乘法指令
////////////////////////////////////////////////////////////////////
void CCpu::CpuMul(CString a){
	if(!a.Compare("bx")){
		ax=ax*bx;
		pdlg->m_strdictate.Format("MUL ax,%s",a);
	}
	else if(!a.Compare("cx")){
		ax=ax*cx;
		pdlg->m_strdictate.Format("MUL ax,%s",a);
	}
	pdlg->Updatashow();

} 
///////////////////////////////////////////////////////////////////
//模拟除法指令
///////////////////////////////////////////////////////////////////
void CCpu::CpuDiv(CString a){
	if(!a.Compare("bx")){
		ax=ax/bx;
		pdlg->m_strdictate.Format("DIV ax,%s",a);
	}
	else if(!a.Compare("cx")){
		ax=ax/cx;
		pdlg->m_strdictate.Format("DIV ax,%s",a);
	}
	pdlg->Updatashow();

}
///////////////////////////////////////////////////////////////////
//模拟赋值指令
///////////////////////////////////////////////////////////////////
void CCpu::CpuMov(CString a,CString b){
	if(!a.Compare("ax")&&b.Compare("bx")){
		ax=bx;
		pdlg->m_strdictate.Format("MOV %s,%s",a,b);
	}
	else if(!a.Compare("ax")&&b.Compare("cx")){
		ax=cx;
		pdlg->m_strdictate.Format("MOV %s,%s",a,b);
	}
	else if(!a.Compare("bx")&&b.Compare("cx")){
		bx=cx;
		pdlg->m_strdictate.Format("MOV %s,%s",a,b);
	}
	else if(!a.Compare("bx")&&b.Compare("ax")){
		bx=ax;
		pdlg->m_strdictate.Format("MOV %s,%s",a,b);
	}
	else if(!a.Compare("cx")&&b.Compare("ax")){
		cx=ax;
		pdlg->m_strdictate.Format("MOV %s,%s",a,b);
	}
	else if(!a.Compare("cx")&&b.Compare("bx")){
		cx=bx;
		pdlg->m_strdictate.Format("MOV %s,%s",a,b);
	}
	pdlg->Updatashow();
}
////////////////////////////////////////////////////////////////////
void CCpu::CpuMov(CString a,int b){
	if(!a.Compare("ax")){
		ax=b;
		pdlg->m_strdictate.Format("MOV %s,%d",a,b);
	}
	else if(!a.Compare("bx")){
		bx=b;
		pdlg->m_strdictate.Format("MOV %s,%d",a,b);
	}
	else if(!a.Compare("cx")){
		cx=b;
		pdlg->m_strdictate.Format("MOV %s,%d",a,b);
	}
	pdlg->Updatashow();
}
///////////////////////////////////////////////////////////////////
//模拟cpu其他指令,显示字符串a
///////////////////////////////////////////////////////////////////
void CCpu::CpuOther(CString a){       //模拟cpu其他指令,显示字符串a
	pdlg->m_strdictate.Format("%s",a);
	pdlg->Updatashow();
}
/////////////////////////////////////////////////////////////////////
//显示中间结果
/////////////////////////////////////////////////////////////////////
void CCpu::Cpushowregister(){
	pdlg->m_strmidresult.Format(_T("AX  :  %d       BX  :  %d\r\nCX  :  %d\r\nCS  :  %d\r\nDS  :  %d\r\n"),ax,bx,cx,cs,ds);
	pdlg->Updatashow();

}
/////////////////////////////////////////////////////////////////////
//cpu进程调用。采用先来先服务的进程调度。
/////////////////////////////////////////////////////////////////////
void CCpu::CpuChooseprocess(CMemory * pmemory){
	int i,run;                        //i循环变量,run运行的进程号
	
		run=0;
		for(i=1;i<=10;i++){           //在就绪进程队列中选择一进程运行
			if(pmemory->memory.pcb[i].full){   //如果存放有进程
				if(pmemory->memory.pcb[i].pcb.istate==1){
					if(pmemory->memory.pcb[i].pcb.ID<pmemory->memory.pcb[run].pcb.ID){//时间优先服务
						run=i;
					}
				}
			}
		}
		//运行[run]进程
		pmemory->Setm_pro_state(run,2);   //设置[run]进程为运行状态
		CpuInit(pmemory->memory.pcb[run].pcb);
		process=pmemory->memory.pcb[run].pcb;  //初始化process(CpuRun()函数使用)
		ax=process.isavereg[0];
		bx=process.isavereg[1];
		cx=process.isavereg[2];
		cs=process.isavereg[3];
		ds=process.isavereg[4];
		psw[0]=0;
		//psw[0]=process.isavereg[5];        //是否有中断
		psw[1]=process.isavereg[6];
		psw[2]=process.isavereg[7];           //初始化寄存器(ax.bx.cx.cs.ds.psw)
		Cpushowregister();
		pdlg->m_showprocess.Format("%s",pmemory->memory.pcb[run].pcb.strname);
		pdlg->m_strdictate.Format("%s",pmemory->memory.pcb[run].pcb.pdictate[0].strename);			
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -