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

📄 registerdlg.cpp

📁 这个也是我们的毕业设计课题
💻 CPP
字号:
// RegisterDlg.cpp : implementation file
//

#include "stdafx.h"
#include "DFYSimulator.h"
#include "RegisterDlg.h"
#include "DFY\CPU.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CRegisterDlg dialog


CRegisterDlg::CRegisterDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CRegisterDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CRegisterDlg)
	m_pEditRegisterName=NULL;
	m_pEditRegisterValue=NULL;
	m_pListDisplayRegister=NULL;
	m_strRegName = _T("");
	m_nRegValue = 0;
	//}}AFX_DATA_INIT
}


void CRegisterDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRegisterDlg)
	DDX_Control(pDX, IDC_LIST_REGISTER, m_listDisplayReg);
	DDX_Text(pDX, IDC_EDIT_REGISTERNAME, m_strRegName);
	DDX_Text(pDX, IDC_EDIT_REGISTERVALUE, m_nRegValue);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CRegisterDlg, CDialog)
	//{{AFX_MSG_MAP(CRegisterDlg)
	ON_WM_MOVE()
	ON_WM_CLOSE()
	ON_LBN_DBLCLK(IDC_LIST_REGISTER, OnDblclkListRegister)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRegisterDlg message handlers

void CRegisterDlg::OnMove(int x, int y) 
{
	CDialog::OnMove(x, y);
	GetParent()->SetActiveWindow();
}

void CRegisterDlg::OnClose() 
{
	CMainFrame* pFrame=(CMainFrame*)GetParent();
	pFrame->SetRegisterDlg(NULL);
	DestroyWindow();
	CDialog::OnClose();
}
void CRegisterDlg::OnOK()
{
	UpdateData(TRUE);
	m_listDisplayReg.ResetContent();
	CDFYSimulatorApp* pApp=(CDFYSimulatorApp*)AfxGetApp();
	CPU* _cpu=pApp->GetSimulatorCPU();
	if(_cpu)
	{
		///if(m_strRegName=="CS") //in this version ,the value of
									//CS shoud be 0;
		//	_cpu->SetCS(UNSHORT(m_nRegValue));
		if(m_strRegName=="IP")
			_cpu->SetIP(m_nRegValue);
		if(m_strRegName=="SP")
			_cpu->SetSP(m_nRegValue);
		if(m_strRegName=="FLAGS")
			_cpu->SetFLAGS(m_nRegValue);
		if(m_strRegName=="PC")
			_cpu->SetPC(UNSHORT(m_nRegValue));
		if(m_strRegName=="GR0")
			_cpu->SetGR(m_nRegValue,0);
		if(m_strRegName=="GR1")
			_cpu->SetGR(m_nRegValue,1);
		if(m_strRegName=="GR2")
			_cpu->SetGR(m_nRegValue,2);
		if(m_strRegName=="GR3")
			_cpu->SetGR(m_nRegValue,3);
		if(m_strRegName=="GR4")
			_cpu->SetGR(m_nRegValue,4);
		FlushRegister();
	}


}
void CRegisterDlg::OnCancel()
{
}

void CRegisterDlg::FlushRegister()
{
	m_listDisplayReg.ResetContent();
	CDFYSimulatorApp* pApp=(CDFYSimulatorApp*)AfxGetApp();
	CPU* _cpu=pApp->GetSimulatorCPU();
	if(_cpu)
	{
		WORD wData=0;
		wData=_cpu->GetCS();
		m_listDisplayReg.SetItemData(0,wData);
		DisplayReg("CS",wData);
		wData=_cpu->GetIP();
		m_listDisplayReg.SetItemData(1,wData);
		DisplayReg("IP",wData);
		wData=_cpu->GetFLAGS();
		m_listDisplayReg.SetItemData(2,wData);
		DisplayReg("FLAGS",wData);
		wData=_cpu->GetPC();
		m_listDisplayReg.SetItemData(3,wData);
		DisplayReg("PC",wData);
		wData=_cpu->GetSP();
		DisplayReg("SP",wData);
		m_listDisplayReg.SetItemData(4,wData);
		wData=_cpu->GetGR(0);
		m_listDisplayReg.SetItemData(5,wData);
		DisplayReg("GR0",wData);
		wData=_cpu->GetGR(1);
		m_listDisplayReg.SetItemData(6,wData);
		DisplayReg("GR1",wData);
		wData=_cpu->GetGR(2);
		m_listDisplayReg.SetItemData(7,wData);
		DisplayReg("GR2",wData);
		wData=_cpu->GetGR(3);
		m_listDisplayReg.SetItemData(8,wData);
		DisplayReg("GR3",wData);
		wData=_cpu->GetGR(4);
		m_listDisplayReg.SetItemData(9,wData);
		DisplayReg("GR4",wData);
	}
}

void CRegisterDlg::DisplayReg(CString strRegName, WORD wData)
{
	CString strData;
	UNSHORT wData1=(UNSHORT)wData;
	if(wData1<16)
		strData.Format("000%xH",wData1);
	else if(wData1>=16&&wData1<256)
		strData.Format("00%xH",wData1);
	else if(wData1>=256&&wData1<4096)
		strData.Format("0%xH",wData1);
	else
		strData.Format("%xH",wData1);
	CString str;
	str.Format("%-8s=%8s",strRegName,strData);
	str.MakeUpper();
	m_listDisplayReg.AddString(str);

}

BOOL CRegisterDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	FlushRegister();	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CRegisterDlg::OnDblclkListRegister() 
{
	int i=m_listDisplayReg.GetCurSel();
	if(i!=LB_ERR)
	{
		CString str;
		m_listDisplayReg.GetText(i,str);
		for(int j=0;j<20;j++)
		{
			if(str.GetAt(j)==' ')
				break;
			m_strRegName=str.Left(j+1);
		}
		m_nRegValue=m_listDisplayReg.GetItemData(i);
		UpdateData(FALSE);
	}

}

⌨️ 快捷键说明

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