Моделирование машины Фон-Неймана
Автор работы: Пользователь скрыл имя, 25 Февраля 2015 в 20:19, реферат
Описание работы
Данная вычислительная практика посвящена изучению структуры и работы ЦВМ, изучению, освоению и использованию графических возможностей C++, знакомству с основами языка ассемблера и машинного языка, составом стандартных библиотек системы программирования на языке С++.
Файлы: 1 файл
Отчет практика.doc
— 202.00 Кб (Скачать файл)
Вывод
При разработке программного проекта «Модель ЦВМ» мною были изучены алгоритм работы цифровой вычислительно машины со структурой, предложенной Фон-Нейманом, графические возможности модуля Graphics.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, при
отсутствии единицы переноса/
= $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[
}
for (i=0;i<CountMsg;i++)
{
outtextxy(ArrMsg[i].X,ArrMsg[
}
for (i=0;i<CountLine;i++)
{