Моделирование машины Фон-Неймана

Автор работы: Пользователь скрыл имя, 25 Февраля 2015 в 20:19, реферат

Описание работы


Данная вычислительная практика посвящена изучению структуры и работы ЦВМ, изучению, освоению и использованию графических возможностей C++, знакомству с основами языка ассемблера и машинного языка, составом стандартных библиотек системы программирования на языке С++.

Файлы: 1 файл

Отчет практика.doc

— 202.00 Кб (Скачать файл)

 

 

 

 

 

Вывод

 

При разработке программного проекта «Модель ЦВМ» мною были изучены алгоритм работы цифровой вычислительно машины со структурой, предложенной Фон-Нейманом, графические возможности модуля Graphics.C++. Также были изучены принципы и технология модульного программирования на языке C++. В ходе моделирования вычислительной части программы были изучены основы языка Ассемблера и машинного языка. Также я подробнее ознакомился с составом стандартных библиотек системы программирования на языке С++.                       

              В результате проделанной работы  я получил и закрепил новые  знания об основных процедурах  и функциях языка высокого  уровня C++, а также научился  новым приемам разработки программ на языке высокого уровня.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список используемой литературы

   1. Моделирование машины  Фон-Неймана. Метод. указания к лабораторной  работе /Сост. А.Л. Симаков; Чуваш. ун-т. Чебоксары, 2001. - 24 с.

   2. Симаков А.Л. Разработка  модели ЦВМ; лаб. Практикум / А.Л. Симаков. – Чебоксары: Изд-во Чуваш. Ун-та, 2010. – 52 с.

   3. Работа в интегрированной  среде программирования Turbo Рascal: Метод. указания к лабораторным  работам/ сост. А.Л.Симаков, Чебоксары: Изд-во. Чуваш. ун-та, 1993, 60с.

   4. Алгоритмические  языки и программирование: Метод. Указания к курсовой работе / Сост. А.Л.Симаков. Чебоксары: Изд-во  Чуваш. ун-та, 1995. - 36 с. (115 экз.)

   5. Андреева А.А. Симаков  А.Л., Стеценко В.Г. Программирование  на  языке Паскаль:  Практикум. Чебоксары: Изд-во  Чуваш.  ун-та, 1993. 76 с. (145 экз.)

   6. Йенсен К. Вирт  Н.  Паскаль. Руководство для пользователя  и описание языка.  - М.:  Финансы  и статистика, 1982,1989. (75+20 экз.)

   7. В.В. Подбельский. Язык C++: Учебное пособие. - Москва: Финансы и статистика, 1995. 560с.

  8. ГОСТ 19.402-78 ЕСПД

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение

Инструкция для пользователя, расположенная в файле “ReadMe”.

1. Общие сведения

2. Минимальные системные  требования

3. Клавиши управления

 

1. Общие сведения

---------------------

Данная программа демонстрирует взаимодействие процессора и оперативной памяти, показывая структуру цифровой вычислительной машины.

 

2. Минимальные системные  требования

---------------------

ОС Microsoft Windows 95;

персональный компьютер с 386DX процессором;

ОЗУ 4 Мб;

жесткий диск 50 Мб;

разрешение VGA.

 

3. Клавиши управления

---------------------

[Tab] - Выбор следующего  элемента

[-/+] - Режим "Ввод": уменьшить/увеличить  значение элемента,

          Режим "Демо": уменьшить/увеличить  скорость демонстрации

[F7] - Выполнение программы в режиме "Такт"

[F8] - Выполнение программы  в режиме "Команда"

[F9] - Выполнение программы  в режиме "Демо"

[Ctrl]-[F9] - Выполнение программы  в режиме "Автомат"

[Esc] – Прервать выполнение

[Alt]-[X] - Выход

Входные данные

Выходные данные

A

B

N

F

Zero

РгФ

1

5

5

5

2

$0000

$0001

2

6

4

3

0

$0000

$0003

3

A

B

C

FFFE

$0000

$0000

4

C

4

13

A

$0000

$0000

5

2

3

3

5

$0000

$0000


A, B, N, F – переменные функции F=3+(N-A)-B+4;

F – результат вычислений;

Zero – количество вычитаемых нулей;

РгФ – регистр флагов

      = $0000, при  отсутствии единицы переноса/заема, и когда сумма в Акк ≠ 0;

      = $0001, при  Акк = 0;

      = $0002, при  появлении единицы переноса/заема;

      = $0003, при  появлении единицы переноса / заема  и при Акк = 0.

Таблица сравнения текстов программы на Turbo Pascal и C++

 

На языке Turbo Pascal

На языке C++

Количество

строк

670

780

Количество исходных файлов

5

7

MBMdata.pas   =   197

Type.inc   =   35

MBMdata.cpp   =  164

Func.h   =   25

MBMinout.pas    =  194

MBMinout.cpp   =  238

Graphlib.pas   =   60

Graphlib.cpp   =  86

MBMcpu.pas   =   187

MBMcpu.cpp   =   162

MBM.pas   =  32

MBM.cpp   =   70


 

 

Файлы исходных модулей и выполняемой программы

Модуль типов данных (type.inc)

typedef unsigned short int word;

//рамка

struct TRegTV

{

    int X,Y,W,H;

    word* Value;

};

 

typedef enum {Down,Right} Direction;

//тип линии

struct TLineTV

{

  int X,Y,Len;

  Direction Dir;

};

//надписи

struct TMsgTV

{

  int X,Y;

  char *Msg;

};

struct TInfo

{

  int X,Y;

  char *Msg;

};

struct THelp

{

  int X,Y,W,H;

  char *Msg;

};

typedef enum  {Vvod,Auto,Demo,Takt,Cmnd} TSost;

 

Модуль заголовков функций (func.h)

//Прототипы функций

#include "type.inc"

int OutStructure();

int InitMBM(void);

void ClearBar(int Left,int Top,int Right,int Bottom);

void OutValues();

void OutIntXY(int X, int Y, int Lens, word IntVal);

void OutHexXY(int X,int Y, short int Lens, word Val);

char * WordToHex(word N, short int Lens);

void RectangleDouble();

void OutSost();

char ReadKey();

void OutTime();

//из модуля MBMCPU

void ExecAdd();

void ExecSub();

void ExecLoa();

void ExecSto();

void ExecJZ();

void ExecJmp();

void ExecEND();

void ExecOperation();

void ExecTakt();

void ExecuteProgram();

 

Модуль данных (MBMdata.cpp)

#include "type.inc"

#include <stdio.h>

TSost Sost=Vvod;     //Состояние

  word Flags=0;      //РгФ

  word Akk=0;        //Akk

  word PC=0x000C;    //СчК

  word Command=0;    //РгФ

  word Adres=0;      //РгА

  word Data=0;       //РгД

  word Shag=1;       //шаг измения в секунду

  word Speed=10;     //1 операция в секунду

  word COP=0;        //код  операции

  word ADR=0;        //адресная  часть команды

  word NumTakt=0;    //номер такта

  word Aisp=0;       //адрес  исполнительный

  int EndProg=0;     //программа  завершена?

  int EndCmnd=0;     //команда завершена?

  word buf=0;        //буферная  переменная

 

int CountMsg=56;

TMsgTV ArrMsg[] ={

    {74,40,"Процессор"},

    {352,40,"Память"},

    {376,54,"Ячейки ОЗУ"},

    {12,50,"АЛУ"},

    {192,50,"УУ"},

    {135,73,"СчК"},

    {65,73,"РгФ"},

    {65,108,"ZC"},

    {65,213,"Акк"},

    {135,213,"РгК"},

    {228,45,"R/W"},

    {295,73,"РгА"},

    {295,213,"РгД"},

    {530,40,"Скорость демонстрации"},

    {530,80,"Шаг"},

    {530,120,"Такт"},

    {530,160,"Режим"},

    {222,85,"Адрес"},

    {216,225,"Данные"},

    {194,165,"+"},

    {236,57,">"},

    {278,90,">"},

    {373,90,">"},

    {373,230,">"},

    {278,230,">"},

    {3255,230,"<"},

    {180,170,">"},

    {130,170,">"},

    {40,170,"<"},

    {445,68,"3"},

    {445,88,"Four"},

    {445,108,"One"},

    {445,128,"A"},

    {445,148,"B"},

    {445,168,"N"},

    {445,188,"F"},

    {445,208,"Zero"},

    {445,228,"NA"},

    {445,248,"Func"},

    {445,268,"LoaF1"},

    {445,288,"LoaF2"},

    {445,308,"Loa3"},

    {541,201,"Время"},

    {285,245,"15"},

    {347,245,"0"},

    {37,375,"Управление:"},

    {15,385,"Esc    : Прерывание"},

    {15,395,"Tab    : Выбрать  следующий элемент "},

    {15,405,"F7     : Режим 'Такт'"},

    {15,415,"F8     : Режим 'Команда'"},

    {15,425,"F9     : Режим 'Демо'"},

    {15,435,"F10    : Режим 'Автомат'"},

    {15,445,"+,-    : "},

    {63,445,"   Ввод-Изменить  значение элемента"},

    {63,455,"   Демо-Изменить  скорость"},

    {15,465,"Alt-X  : Выход"},

  };

int CountLine=20;

TLineTV ArrLine[]={

{210,60,60,Right},

{195,93,90,Right},

{355,93,25,Right},

{203,233,81,Right},

{355,233,25,Right},

{18,281,185,Right},

{18,173,44,Right},

{110,173,50,Right},

{175,173,27,Right},

{1,371,636,Right},

{18,173,108,Down},

{62,173,50,Down},

{62,243,38,Down},

{110,173,108,Down},

{160,103,70,Down},

{160,243,38,Down},

{175,103,120,Down},

{203,93,80,Down},

{203,233,48,Down},

{390,371,110,Down}

   };

int CountInfo=3;

TInfo ArrInfo[]={

{460,375,"Функция:"},

{450,395,"F=3+(N-A)-B+4"},

{250,5,"Разработка  модели ЦВМ"},

       // {440,415,"Васильев Константин ИВТ-41-12"}

};

char UserCmnd;

char CmndExit=45;

word Mem[0x0029]={

     //Add=1

     //Sub=2

     //Load=3

     //Sto=4

     //JZ=5

     //Jmp=6

     //End=7

     //Адрес          .ASM              Код

     /*0x0000       Three  */           3,

     /*0x0001         Four    */    4,

     /*0x0002         One     */    1,

     /*0x0003         A       */    10,

     /*0x0004         B       */    11,

     /*0x0005       N       */    12,

     /*0x0006         F       */    13,

     /*0x0007         Zero    */    0,

     /*0x0008         NA      */    2,

     /*0x0009        */             0x000C,

     /*0x000A      */                    0x0015,

   0x001D,                // 000B

   0x0300,                // 000C

   0x0406,                // 000D

   0x0305,                // 000E

   0x0408,                // 000F

   0x0303,                // 0011

   0x0521,                // 0012

   0x0308,                // 0013

   0x0203,                // 0014

   0x0408,                // 0015

   0x0306,             // 0016

   0x0108,                // 0017

   0x0406,                // 0018

   0x0304,                // 0019

   0x0525,                // 001A

   0x0306,                // 001B

   0x0204,                // 001C

   0x0406,                // 001D

   0x0306,                // 001E

   0x0101,                // 001F

   0x0406,                // 0021

   0x0709,                // 0022

   0x0307,                // 0023

   0x0102,                // 0024

   0x0407,                // 0025

   0x060A,                // 0026

   0x0307,                // 0027

   0x0102,                // 0028

   0x0407,                // 0029

   0x060B  };

int CountReg=26;

struct TRegTV ArrReg[]={

  {530, 53,  70, 20,&Speed},        // 0 Speed

  {530, 93,  70, 20,&Shag},         // 1 Shag

  {125, 83,  70, 20, &PC},          // 2 c4k

  {380 , 123, 60, 20,&Mem[0x0003]},// 3 A

  {380, 143, 60, 20, &Mem[0x0004]}, // 4 B

  {380, 163, 60, 20, &Mem[0x0005]}, // 5 N

  {380, 183, 60, 20, &Mem[0x0006]}, // 6 F

  {530, 128, 70,20, &NumTakt},      // 7 Takt

  { 25, 83,  70,20, &Flags},        // 8 RgF

  {285, 83,  70,20, &Adres},       // 9 RgA

  {285, 223, 70,20, &Data},         //10 RgD

  {125, 223, 70,20, &Command},      //11 RgK

  { 25, 223, 70,20, &Akk},          //12 Akk

  { 10,  48,200,250, NULL},         //13 YY

  {270,  48,220,290, NULL},         //14 OZU

  {380,  63, 60, 20, &Mem[0x0000]}, //15 3

  {380,  83, 60, 20, &Mem[0x0001]}, //16 4

  {380, 103, 60, 20, &Mem[0x0002]}, //17 1

  {380, 203, 60, 20, &Mem[0x0007]}, //18 Zero

  {380, 223, 60, 20, &Mem[0x0008]}, //19 NA

  {380, 243, 60, 20, &Mem[0x0009]}, //20 Func

  {380, 263, 60, 20, &Mem[0x000A]}, //21 LoaF1

  {530, 168, 70, 20, NULL},         //22 Sost

  {530, 209, 70, 20, NULL},         //23 Time

  {380, 283, 60, 20, &Mem[0x000B]}, //24 LoaF2

  {380, 303, 60, 20, &Mem[0x000C]}  //25 Loa Three

};

word CurrentReg=3, MaxCurrReg=7;

 

char *SostName[]={"Ввод","Авто","Демо","Такт","КМНД"};

Модуль ввода-вывода (MBMinout.cpp)

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <graphics.h>

#include <values.h>

#include "func.h"

extern char *SostName[];

extern int CountReg;

extern TSost Sost;

extern const word MaxTakt[];

extern int CountMsg;

extern int CountLine;

extern int CountInfo;

extern TInfo ArrInfo[];

extern TRegTV ArrReg[];

extern TMsgTV ArrMsg[];

extern TLineTV ArrLine[];

extern word CurrentReg;

extern THelp ArrHelp[];

extern int HelpMsg;

int OutStructure()

{

 

  int i;

  for (i=0;i<CountReg;i++)

  {

     rectangle(ArrReg[i].X,ArrReg[i].Y,ArrReg[i].X+ArrReg[i].W,ArrReg[i].Y+ArrReg[i].H);

  }

 

  for (i=0;i<CountMsg;i++)

  {

    outtextxy(ArrMsg[i].X,ArrMsg[i].Y,ArrMsg[i].Msg);

  }

 

  for (i=0;i<CountLine;i++)

  {

Информация о работе Моделирование машины Фон-Неймана