Разработка структуры гипотетического микропроцессора и центральной части МЭВМ на его базе. Эмуляция выполнения команд

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?вать программу в виде отдельных процедур и функций;

  • организовать защиту от некорректного ввода;
  • обеспечить надежное хранение информации;
  • язык программирования - Visual C++.
  • Программа, реализующая изучение и эмуляцию команд АЛУ создается для операционной системы Microsoft Windows 95, 98, NT, Me, XP.
  • Б.3.2 Требования к техническому обеспечению
  • К техническому обеспечению предъявляются следующие требования:
  • для функционирования проектируемой программы достаточно IBM совместимой машины типа АТ с процессором i80486 и выше или любого совместимого с ним;
  • оперативной памяти RAM не менее 16Мb;
  • монитор типа SVGA;
  • клавиатура;
  • манипулятор мышь.
  • Приложение В

     

    РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

    Для запуска программы-эмулятора работы микроЭВМ необходимо запустить файл mp80386.exe.

    В появившемся окне будет изображена схема разработанной микроЭВМ, включающая в себя ОЗУ, структурную схему гипотетического микропроцессора и шинный интерфейс.

    В правой части окна находится панель управления работой программы. Для начала выполнения команд необходимо нажать кнопку Следующий шаг (для пошагового выполнения программы) или Авто(для автоматической работы программы). Чтобы начать выполнение программы заново с самого начала, необходимо нажать кнопку Сброс.

    При нажатии кнопки О программе появляется окно с информацией о назначении данного ПП.

    Для выхода из программы нужно нажать кнопку Выход, либо закрыть окно стандартным способом (нажатием кнопки закрытия в правом верхнем углу окна).

     

    Приложение Г

     

    ЭКРАННЫЕ ФОРМЫ

     

    Рисунок Г.1 - Иллюстрация работы программы

     

    Приложение Д

     

    ЛИСТИНГ ПРОГРАММЫ

    // MP80386Dlg.cpp : implementation file

    #include "stdafx.h"

    #include "MP80386.h"

    #include "MP80386Dlg.h"

    #ifdef _DEBUG

    #define new DEBUG_NEW

    #undef THIS_FILEchar THIS_FILE[] = __FILE__;

    #endifi=0;

    ////////////////////////////////////////////////////////////////// dialog used for App AboutCAboutDlg : public CDialog

    {public:();

    // Dialog Data

    //{{AFX_DATA(CAboutDlg){ IDD = IDD_ABOUTBOX };

    //}}AFX_DATA

    // ClassWizard generated virtual function overrides

    //{{AFX_VIRTUAL(CAboutDlg):void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

    //}}AFX_VIRTUAL

    // Implementation:

    //{{AFX_MSG(CAboutDlg)

    //}}AFX_MSG_MESSAGE_MAP()

    };::CAboutDlg() : CDialog(CAboutDlg::IDD)

    { //{{AFX_DATA_INIT(CAboutDlg)

    //}}AFX_DATA_INIT

    }CAboutDlg::DoDataExchange(CDataExchange* pDX)

    { CDialog::DoDataExchange(pDX);

    //{{AFX_DATA_MAP(CAboutDlg)

    //}}AFX_DATA_MAP

    }_MESSAGE_MAP(CAboutDlg, CDialog)

    //{{AFX_MSG_MAP(CAboutDlg)

    // No message handlers

    //}}AFX_MSG_MAP_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////

    // CMP80386Dlg dialogDlg::CMP80386Dlg(CWnd* pParent /*=NULL*/)

    : CDialog(CMP80386Dlg::IDD, pParent)

    {//{{AFX_DATA_INIT(CMP80386Dlg)

    //}}AFX_DATA_INIT

    // Note that LoadIcon does not require a subsequent DestroyIcon in Win32_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

    }CMP80386Dlg::DoDataExchange(CDataExchange* pDX)

    {CDialog::DoDataExchange(pDX);

    //{{AFX_DATA_MAP(CMP80386Dlg)_Control(pDX, IDC_NEXT, m_Next);_Control(pDX, IDC_AUTO, m_Auto);_Control(pDX, IDC_RR, m_RR);_Control(pDX, IDC_RO, m_RO);_Control(pDX, IDC_RK, m_RK);_Control(pDX, IDC_OF, m_OF);_Control(pDX, IDC_EIP, m_EIP);_Control(pDX, IDC_EBX, m_EBX);_Control(pDX, IDC_EAX, m_EAX);_Control(pDX, IDC_DS, m_DS);_Control(pDX, IDC_CS, m_CS);_Control(pDX, IDC_CF, m_CF);_Control(pDX, IDC_BR2, m_BR2);_Control(pDX, IDC_BR1, m_BR1);_Control(pDX, IDC_BAD, m_BAD);_Control(pDX, IDC_TABLE_CS, m_TABLE_CS);

    //}}AFX_DATA_MAP}_MESSAGE_MAP(CMP80386Dlg, CDialog)

    //{{AFX_MSG_MAP(CMP80386Dlg)_WM_SYSCOMMAND()_WM_PAINT()_WM_QUERYDRAGICON()_BN_CLICKED(IDC_RESET, OnReset)_BN_CLICKED(IDCLOSE, OnClose)_BN_CLICKED(IDC_INFO, OnInfo)_BN_CLICKED(IDC_NEXT, OnNext)_BN_CLICKED(IDC_AUTO, OnAuto)

    //}}AFX_MSG_MAP_MESSAGE_MAP()

    ////////////////////////////////////////////////////////

    // CMP80386Dlg message handlersCMP80386Dlg::OnInitDialog()

    {CDialog::OnInitDialog();((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);(IDM_ABOUTBOX < 0xF000);* pSysMenu = GetSystemMenu(FALSE);(pSysMenu != NULL)

    {CString strAboutMenu;.LoadString(IDS_ABOUTBOX);(!strAboutMenu.IsEmpty())

    {pSysMenu->AppendMenu(MF_SEPARATOR);>AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

    }}(m_hIcon, TRUE); // Set big icon(m_hIcon, FALSE);// Set small iconTRUE; // return TRUE unless you set the focus to a control

    }CMP80386Dlg::OnSysCommand(UINT nID, LPARAM lParam)

    {if ((nID & 0xFFF0) == IDM_ABOUTBOX)

    {CAboutDlg dlgAbout;.DoModal();

    }::OnSysCommand(nID, lParam);(FALSE);

    }CMP80386Dlg::OnPaint()

    {if (IsIconic())

    {CPaintDC dc(this); // device context for painting(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

    // Center icon in client rectanglecxIcon = GetSystemMetrics(SM_CXICON);cyIcon = GetSystemMetrics(SM_CYICON);rect;(&rect);x = (rect.Width() - cxIcon + 1) / 2;y = (rect.Height() - cyIcon + 1) / 2;

    // Draw the icon.DrawIcon(x, y, m_hIcon);

    }

    {OnReset(); ::OnPaint();

    }}CMP80386Dlg::OnQueryDragIcon()

    {return (HCURSOR) m_hIcon;

    }CMP80386Dlg::OnReset()

    {int l;j=0;str = "";=1;(l=1;l<8;l++)(l, false, 2);(l=8;l<29;l++)(l, false, 1);_TABLE_CS.DeleteAllItems();_TABLE_CS.DeleteColumn(0);_TABLE_CS.DeleteColumn(0);_TABLE_CS.DeleteColumn(0);_TABLE_CS.SetExtendedStyle(m_TABLE_CS.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);_TABLE_CS.InsertColumn(0,"addr",LVCFMT_LEFT,40);_TABLE_CS.InsertColumn(1,"data",LVCFMT_LEFT,60);_TABLE_CS.InsertColumn(2,"value",LVCFMT_LEFT,70);_TABLE_CS.InsertItem(0,"1000");_TABLE_CS.SetItem(0,1,LVIF_TEXT,"82C0",0,0,0,0);_TABLE_CS.SetItem(0,2,LVIF_TEXT,"ADD AL,8D",0,0,0,0);_TABLE_CS.InsertItem(1,"1000");_TABLE_CS.SetItem(1,1,LVIF_TEXT,"",0,0,0,0);_TABLE_CS.SetItem(1,2,LVIF_TEXT,"label:",0,0,0,0);_TABLE_CS.InsertItem(2,"1002");_TABLE_CS.SetItem(2,1,LVIF_TEXT,"88C1",0,0,0,0);_TABLE_CS.SetItem(2,2,LVIF_TEXT,"MOV AL,BL",0,0,0,0);_TABLE_CS.InsertItem(3,"1004");_TABLE_CS.SetItem(3,1,LVIF_TEXT,"EBFFFC",0,0,0,0);_TABLE_CS.SetItem(3,2,LVIF_TEXT,"JMP label",0,0,0,0);(l=0x1007;l<0x1012;l++)

    {j++;.Format("%X",l);_TABLE_CS.InsertItem(3+j,str);_TABLE_CS.SetItem(3+j,1,LVIF_TEXT,"90",0,0,0,0);_TABLE_CS.SetItem(3+j,2,LVIF_TEXT,"NOP",0,0,0,0);

    }_BR1.ResetContent();_BR2.ResetContent();_RR.ResetContent();_BAD.ResetContent();_RO.ResetContent();_OF.ResetContent();_OF.InsertString(0,"0"); _CF.ResetContent();_CF.InsertString(0,"0"); _EAX.ResetContent();_EAX.InsertString(0,"F018"); _EBX.ResetContent();_EBX.InsertString(0,"18B2"); _EIP.ResetContent();_EIP.InsertString(0,"0000"); _CS.ResetContent();_CS.InsertString(0,"0100");_DS.ResetContent();_DS.InsertString(0,"0900");_RK.ResetContent();_RK.InsertString(0,"ADD AL,8D");

    }CMP80386Dlg::Triang(int left,int top,int trend,bool On)

    {POINT p[]={{left-7,top-3},{left,top},{left-7,top+3}};//влевоp2[]={{left,top},{left+7,top-3},{left+7,top+3}};//вправоp3[]={{left,top},{left+3,top+7},{left-3,top+7}};//вверхp4[]={{left,top},{left+3,top-7},{left-3,top-7}};//внизdc(this);Pen;Brush;* oldbrush;* oldpen;(On)

    {Pen.CreatePen(PS_SOLID, 1, RGB(200,0,0));.CreateSolidBrush(RGB(200,0,0));

    }

    { Pen.CreatePen(PS_SOLID, 1, RGB(0,0,0));.CreateSolidBrush(RGB(0,0,0));

    }=dc.SelectObject(&Pen); =dc.SelectObject(&Brush); .SetBkMode(TRANSPARENT);(trend)

    { case 1:dc.Polygon (p,3);;2:dc.Polygon (p2,3);;3:dc.Polygon (p3,3);;4:dc.Polygon (p4,3);;

    }.SelectObject(oldpen);.DeleteObject(); .SelectObject(oldbrush);.DeleteObject();

    }CMP80386Dlg::DrawLine(int name, bool status, int thickness)

    { POINT ps1[]={{30,3