Моделирование машины Фон-Неймана
Автор работы: Пользователь скрыл имя, 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) вывести битовую картинку
из файла. Но поскольку в задании
сказано использовать модуль Gr
2) вариант создания изображения из точек очень долгий, поэтому его применять не будем;
3) для рисования рамок можно использовать линии, но эффективнее будет использовать процедуру rectangle (рисует прямоугольник). Первый вариант изображения рамок – задать координаты диагональных углов.
Однако в изображаемой структуре почти все рамки одинаковые, поэтому второй вариант – хранить длину и ширину рамок в глобальной константе, а в описании рамки указывать только координату точки привязки (левый верхний угол). Однако при этом рамки процессора и памяти придется выводить отдельно, т.е. объем кода увеличится.
Как правило, данные имеют большую структурированность, поэтому при увеличении числа данных сложность программирования уменьшается. Поэтому выберем третий вариант – описатель рамки содержит точку привязки, ширину и высоту рамки. Кроме того значение, которое будет отображаться внутри рамки, должно принадлежать рамке;
4) для вывода стрелок
будем использовать вывод
5) для вывода текста (название работы, имена регистров, ячеек памяти, режима и т.д.) удобно использовать процедуру outtextxy;
6) для вывода линий в модуле Grap
Для вывода схемы МВМ приблизительно определяем координаты размещения всех элементов. Размер экрана – 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) распределить память
– определить адреса
- закодировать ассемблерную программу на машинном языке.
Описание программы
Общие сведения
Программа «Модель Вычислительной Машины Фон-Неймана» является основой в приобретении навыков графических возможностей языка программирования C++ и изучения алгоритма работы цифровой вычислительной машины со структурой, предложенной Фон-Нейманом.
Программа – проект «МВМ» написана на языке программирования C++.
Программное обеспечение, необходимое для функционирования программы:
- Microsoft Windows 95 или выше;
- BorlandC.
Функциональное назначение
Назначение программы - демонстрация работы модели вычислительной машины и ее функционирования в графическом режиме C++.
Пользователь имеет возможность:
- просмотреть помощь по управлению программой;
- менять значения переменных;
- выбирать различные режимы работы программы (авто, демо, такт, команда);
- получить результаты программы.
Описание логической структуры
В состав программы входят следующие модули:
- type.inc – файл, где хранятся все типы данных;
- func.h – заголовочный файл, где хранятся названия всех функций;
- MBM – главный модуль;
- MBMData – модуль данных;
- MBMInOut – модуль ввода-вывода;
- MBMCpu – модуль выполнения машинных команд;
- GraphLib – модуль графических подпрограмм.
1. Главный модуль – получает управляющие директивы пользователя и вызывает подпрограммы выполнения требуемых операций.
2. Модуль данных – хранит общие данные проекта и общие типы данных.
3. Модуль ввода-вывода
– содержит подпрограммы для
реализации интерфейса с
4. Модуль с графическими подпрограммами – расширяет возможности стандартного модуля Graphics.h.
5. Модуль процессора –
содержит подпрограммы
Основные подзадачи модулей:
- отображение структуры МВМ на экране (модуль MBMInOut);
- выбор регистра или ячейки для изменения значения (MBMInOut);
- отображение значений регистров и ячеек на экране в 16-ричной системе счисления (GraphLib);
- реализация режимов работы модели с индикацией выполнения команд по тактам (MBMCpu);
- моделирование процессора в части выполнения машинных команд (MBMCpu).
Используемые технические средства
Минимальные системные требования:
1) Microsoft Windows 95;
2) персональный компьютер с 386DX процессор;
3) 4 Мб памяти;
4) жесткий диск 50 Мб;
5) разрешение VGA.
Вызов и загрузка
Загрузка программы осуществляется запуском файла kurs.bat (F:\kursach).
Входные данные
Входные данные находятся в модуле MBMData. Они представляют собой 16-ричные положительные числа в диапазоне от 0 до FFFF. После запуска программы можно изменять входные значения: передвигаясь по ячейкам с помощью клавишы “Tab”, можно увеличить значение ячейки (клавиша “+”) или уменьшить (клавиша “-”).
Выходные данные
Выходные данные выводятся на экран в графическом режиме. Программа вычисляет значение F по исходной формуле.