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

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

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


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

Файлы: 1 файл

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

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

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«Чувашский государственный университет им. И.Н.Ульянова»

 

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

Факультет информатики и вычислительной техники

 

 

 

Вычислительная практика

по программированию на тему:

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

 

 

 

 

 

 

 

 Выполнил: студент группы ИВТ-41-12

Константинов Сергей

         Проверил: доцент Обломов И.А.

 

 

 

 

 

 

Чебоксары 2014

Оглавление

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Введение

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

Целью работы является освоение технологии разработки и отладки многофайлового программного продукта на примере создания проекта «Модель ЦВМ» на языке С++.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Развернутое индивидуальное задание

1. Конвертировать исходный  текст своей курсовой работы  по программированию с языка  Паскаль на язык Си++ (v.3.1). (без модернизации и изменений, т.е. один к одному).  Сравнить размеры исходных текстов и выполняемых файлов на языках Паскаль и Си++ в форме таблицы.

2. Модернизировать текст  курсовой работы на языке Си++ с целью устранению замечаний  и реализации задания к курсовой работе в полном объёме с учетом следующих требований:

1) Использовать проект в смысле Турбо-оболочки BorlandC;

2) Систематизировать распределение подпрограмм и данных  по файлам проекта;

3) Модуль "Данные" должен содержать только данные;

4) Всем константам дать осмысленные систематизированные имена;

5) Проект должен иметь "дружественный" интерфейс. Основной цикл интерактивной программы должен состоять из подпрограмм "Получить событие (от клавиатуры)" и "Обработать событие".

3. Обязательно наличие руководства пользователя и хронологии модернизации курсовой работы.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Разработка и обоснование способа решения задачи

Модель вычислительной машины реализована схематично, поэтому в программе она разбита на элементы. Каждый элемент представляет собой запись. Прорисовка всех деталей осуществляется с помощью соответствующих процедур.

Цифровая вычислительная машина (ЦВМ) в простейшем случае состоит из центрального процессора (ЦП), содержащего устройство управления (УУ) и арифметико-логическое устройство (АЛУ), и устройства оперативной памяти (ОЗУ).

Память содержит Регистр Адреса РгА, Регистр Данных РгД и мас-сив ячеек ОЗУ. Все ячейки имеют последовательность номера от 0 до 2N-1, где N – число разрядов РгА.

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

Память предназначена для хранения данных. Если данные есть программа, то эти данные записываются в памяти в соседних ячейках по возрастающим адресам.

Процессор содержит Счетчик Команд СчК, Регистр Команд РгК, аккумулятор (или сумматор) АКК, регистр флагов РгФ. Назначение регистров:

СчК: хранение адреса следующей выполняемой команды;

РгК: хранение кода текущей выполняемой команды. Команда содержит Код операции (КОП) и Адресную часть (АДР). КОП определяет что делать, а АДР – над чем делать, где лежит операнд или просто: адрес операнда;

АКК: хранение результата операции;

РгФ: хранение признаков (флагов) результата операции.

Процессор предназначен для последовательного чтения команд из памяти и их выполнения.

 

Для изображения элементов модели вычислительной машины было решено использовать массивы записей и массивы, а также - переменные целого и прочих типов. А описание всех отображаемых элементов хранения есть типированная константа – массив записей.

Для обработки данных используются структуры выбора.

 

Для вывода схемы вычислительной машины есть несколько вариантов. Можно попробовать:

1) вывести битовую картинку  из файла. Но поскольку в задании  сказано использовать модуль Graph, то надо посмотреть его возможности с точки зрения генерации изображения структуры из программы. Из подпрограмм графического модуля нам потребуются процедуры вывода точек, линий, рамок, текста;

2) вариант создания изображения  из точек очень долгий, поэтому  его применять не будем;

3) для рисования рамок  можно использовать линии, но эффективнее будет использовать процедуру rectangle (рисует прямоугольник). Первый вариант изображения рамок – задать координаты диагональных углов.

Однако в изображаемой структуре почти все рамки одинаковые, поэтому второй вариант – хранить длину и ширину рамок в глобальной константе, а в описании рамки указывать только координату точки привязки (левый верхний угол). Однако при этом рамки процессора и памяти придется выводить отдельно, т.е. объем кода увеличится.

Как правило, данные имеют большую структурированность, поэтому при увеличении числа данных сложность программирования уменьшается. Поэтому выберем третий вариант – описатель рамки содержит точку привязки, ширину и высоту рамки. Кроме того значение, которое будет отображаться внутри рамки, должно принадлежать рамке;

4) для вывода стрелок  будем использовать вывод символов  “<” и “>”. Это быстрее  и проще, чем изображать стрелки  из двух линий;

5) для вывода текста (название  работы, имена регистров, ячеек памяти, режима и т.д.) удобно использовать  процедуру outtextxy; 

         6) для вывода линий в модуле Graphics.h предназначена процедура line с параметрами координат начала и конца. Первый вариант решения задачи описания линий – задать четыре числа (координаты начала и конца). Однако для изображения структуры ЭВМ нам потребуются лишь горизонтальные и вертикальные линии. Поэтому удобнее будет использовать второй вариант – указать координаты начала, длину и направление. Будем использовать 2 вариант, т.к. он сокращает процесс отладки;

Для вывода схемы МВМ приблизительно определяем координаты размещения всех элементов. Размер экрана – 480 точек по вертикали и 640 по горизонтали. Исходя из этого рассчитываем приблизительные размеры элементов и их координаты.

 

 

 

 

 

 

 

 

 

 

 

 

 

Разработка и обоснование структур данных и их форматов

Большое количество одинаковых элементов желательно обрабатывать в цикле для уменьшения кода. Отсюда следует, что описание надписей целесообразно хранить в виде массива. Каждая надпись имеет еще одну координату на экране, т.е. описывается разными типами данных. Поэтому структура для описания надписи – это запись с полями: строка и две координаты левого верхнего угла:

struct TMsgTV {

     int X, Y ;

     char Msg[30];

};

Использовать запись удобно тем, что она позволяет легко вводить новые свойства элемента.

Число надписей будет храниться как константа. Дадим ей начальное значение 2, которое изменим в дальнейшей отладке:

const    CountMsg = 2;  {43}

Сами надписи вместе с их координатами храним в массиве записей с начальным значением:

  TMsgTV ArrMsg [CountMsg]  = {

  (120, 80,   “Процессор”),

  (455, 80,   “Память”),

  …           };

Описание линии включает координату (точку привязки), длину и направление. Направление булевский тип (предварительно создадим его). То есть, тип линии – тоже запись, а все линии – массив записей.

struct    TLineTV {    

int X,Y, Len;

Boolean Dir;  // False: вниз, True: направо

};

Введем константу числа линий. Сами линии вместе с их координатами, длиной/шириной и направление будем хранить в массиве записей:

const  CountLine = 2;  {18}

TLineTV  ArrLine [CountLine]  = {

     {290, 120,  60,  True},

     {240, 154, 140, True}

};

Описание рамки включает точку привязки, длину, высоту и значение регистра, т.е. тип рамки – запись:

struct   TRegTV  {

int X,Y, W,H;

TRg  *Value;

};

Описание всех рамок – массив записей. Индекс массива записи начнем с 0, т.к. определение номера следующего регистра будет выполнятся намного легче (одним оператором присваивания с применением операции деление по модулю):

NumReg = (NumReg+1) % CountReg. Поэтому:

const   CountReg  = 3;  {23}

TRegTV ArrReg[CountReg]  = {

  {30,  370, 70, 30, &Shag},    //{0 Shag}

{130,370, 70, 30, &Speed), //{1 Speed}

{170,140, 70, 30, &PC)        //{2 C4K}

};

Построение элемента изображения (текста, линии, рамки) в относительных координатах дает возможность просто перемещать элемент по экрану, изменяя только координаты точки привязки (X,Y).

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

Для получения кода машинной программы необходимо вручную оттранслировать ассемблерную программу:

1) написать вручную программу  вычисления F=3+(N-A)-B+4 на языке ассемблера;

2) распределить память  – определить адреса размещения  переменных A, B, F, N, Zero, констант, размещения кодов машинной программы;

  1. закодировать ассемблерную программу на машинном языке.

 

 

 

 

 

Описание программы

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

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

Программа – проект «МВМ» написана на языке программирования C++.

Программное обеспечение, необходимое для функционирования программы:

- Microsoft Windows 95 или выше;

- BorlandC.

 

Функциональное назначение

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

Пользователь имеет возможность:

- просмотреть помощь по  управлению программой;

- менять значения переменных;

- выбирать различные режимы  работы программы (авто, демо, такт, команда);

- получить результаты  программы.

 

Описание логической структуры

В состав программы входят следующие модули:

- type.inc – файл, где хранятся все типы данных;

- func.h – заголовочный файл, где хранятся названия всех функций;

- MBM – главный модуль;

- MBMData – модуль данных;

- MBMInOut – модуль ввода-вывода;

- MBMCpu – модуль выполнения машинных команд;

- GraphLib – модуль графических подпрограмм.

1. Главный модуль –  получает управляющие директивы пользователя и вызывает подпрограммы выполнения требуемых операций.

2. Модуль данных – хранит  общие данные проекта и общие  типы данных.

3. Модуль ввода-вывода  – содержит подпрограммы для  реализации интерфейса с пользователем.

4. Модуль с графическими подпрограммами – расширяет возможности стандартного модуля Graphics.h.

5. Модуль процессора –  содержит подпрограммы моделирования  работы процессора ЦВМ.

Основные подзадачи модулей:

  1. отображение структуры МВМ на экране (модуль MBMInOut);
  2. выбор регистра или ячейки для изменения значения (MBMInOut);
  3. отображение значений регистров и ячеек на экране в 16-ричной системе счисления (GraphLib);
  4. реализация режимов работы модели с индикацией выполнения команд по тактам (MBMCpu);
  5. моделирование процессора в части выполнения машинных команд (MBMCpu).

 

Используемые технические средства

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

1) Microsoft Windows 95;

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

3) 4 Мб памяти;

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

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

Вызов и загрузка

Загрузка программы осуществляется запуском файла kurs.bat (F:\kursach).

 

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

Входные данные находятся в модуле MBMData. Они представляют собой 16-ричные положительные числа в диапазоне от 0 до FFFF. После запуска программы можно изменять входные значения: передвигаясь по ячейкам с помощью клавишы “Tab”, можно увеличить значение ячейки (клавиша “+”) или уменьшить (клавиша “-”).

 

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

Выходные данные выводятся на экран в графическом режиме. Программа вычисляет значение F по исходной формуле.

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